gpt4 book ai didi

mysql - 如果日期列在查询的 SELECT 部分中,为什么我的查询会变慢?

转载 作者:行者123 更新时间:2023-11-29 01:44:47 25 4
gpt4 key购买 nike

我的 mysql 查询有一个奇怪的行为:

SELECT domain_id, domain_name, domain_lastupdate 
FROM domains
WHERE domain_id > 300000 LIMIT 2000

大约需要 15 秒...

同时

SELECT domain_id, domain_name 
FROM domains
WHERE domain_id > 300000 LIMIT 2000

大约需要 0.05 秒...

我已经尝试了不同的 ID 和不同的限制,先做后做,再做另一种方式来避免缓存结果,但我最终遇到了巨大的时间差异。

我在 domain_id 上有 1 个索引,在 domain_name 上有 1 个索引,但两列都没有...

我只是不明白...

#

domain_lastupdate 是一个简单的日期列。

这是两个查询的 EXPLAIN 输出:

explain SELECT domain_id, domain_name, domain_lastupdate FROM domains WHERE domain_id > 255000 LIMIT 500;
+----+-------------+---------+-------+---------------+-------------+---------+------+----------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+-------+---------------+-------------+---------+------+----------+-------------+
| 1 | SIMPLE | domains | range | UN_domainid | UN_domainid | 4 | NULL | 12575357 | Using where |
+----+-------------+---------+-------+---------------+-------------+---------+------+----------+-------------+
1 row in set (0.00 sec)

第二个:

explain SELECT domain_id, domain_name FROM domains WHERE domain_id > 255000 LIMIT 500;
+----+-------------+---------+-------+---------------+-------------+---------+------+----------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+-------+---------------+-------------+---------+------+----------+--------------------------+
| 1 | SIMPLE | domains | range | UN_domainid | UN_domainid | 4 | NULL | 12575369 | Using where; Using index |
+----+-------------+---------+-------+---------------+-------------+---------+------+----------+--------------------------+
1 row in set (0.01 sec)

知道为什么第一个不使用索引吗?

最佳答案

当您提取已建立索引的非日期列时,SQL Server 能够直接从索引中提取数据,根本不需要转到表中。要获得它必须打表的日期。在日期列上添加索引。

此外,我想您可以创建一个多列索引。确保将 domain_id 作为索引中的第一列。 Creating Indexes

你要用的就是所谓的A Covering Index

关于mysql - 如果日期列在查询的 SELECT 部分中,为什么我的查询会变慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9849411/

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