gpt4 book ai didi

mysql - 250 万行表的 MYSQL 查询非常慢

转载 作者:IT老高 更新时间:2023-10-28 23:48:50 25 4
gpt4 key购买 nike

我真的很难减少查询时间,它目前必须查询 250 万行并且需要 20 多秒

这里是查询

SELECT play_date AS date, COUNT(DISTINCT(email)) AS count
FROM log
WHERE play_date BETWEEN '2009-02-23' AND '2020-01-01'
AND type = 'play'
GROUP BY play_date
ORDER BY play_date desc;

`id` int(11) NOT NULL auto_increment,
`instance` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`type` enum('play','claim','friend','email') NOT NULL,
`result` enum('win','win-small','lose','none') NOT NULL,
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
`play_date` date NOT NULL,
`email_refer` varchar(255) NOT NULL,
`remote_addr` varchar(15) NOT NULL,
PRIMARY KEY (`id`),
KEY `email` (`email`),
KEY `result` (`result`),
KEY `timestamp` (`timestamp`),
KEY `email_refer` (`email_refer`),
KEY `type_2` (`type`,`timestamp`),
KEY `type_4` (`type`,`play_date`),
KEY `type_result` (`type`,`play_date`,`result`)

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE log ref type_2,type_4,type_result type_4 1 const 270404 Using where

查询正在使用 type_4 索引。

有谁知道如何加快查询速度?

谢谢汤姆

最佳答案

已经相对不错了。性能下降是查询必须比较 COUNT(DISTINCT(email)) 的 270404 个 varchar 是否相等,这意味着必须读取 270404 行。

您可以通过创建覆盖索引来加快计数速度。这意味着不需要读取实际行,因为所有必需的信息都存在于索引本身中。

为此,请按如下方式更改索引:

KEY `type_4` (`type`,`play_date`, `email`)

如果这不能加快速度,我会感到惊讶。

(感谢 MarkR 提供正确的术语。)

关于mysql - 250 万行表的 MYSQL 查询非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1791012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com