【发布时间】:2023-03-07 19:46:01
【问题描述】:
非常简单,但让我很困惑:
SELECT `start`, `stop` FROM loadtime
WHERE utilisateur_id = '202931999'
AND `type` = 'stat'
AND `stop` !=0
ORDER BY id DESC
LIMIT 0,1
12 秒
SELECT `start`, `stop` FROM loadtime
WHERE utilisateur_id = '202931999'
AND `type` = 'stat'
AND `stop` !=0
ORDER BY id DESC
LIMIT 0,2 or xxx
0.07 秒
解释说 限制 0, 1
id select_type table type possible_keys
1 SIMPLE loadtime index utilisateur_id_2,utilisateur_id,type
key key_len ref rows Extra
PRIMARY 4 NULL 10089 Using where
限制 0,x
id select_type table type possible_keys
1 SIMPLE loadtime ref utilisateur_id_2,utilisateur_id,type
key key_len ref rows Extra
utilisateur_id 62 const 12103 Using index condition; Using where; Using filesort
所以第一个查询自然不会使用索引。
服务器在 MySQL 5.5.32 上
【问题讨论】:
-
您可以添加
EXPLAIN输出吗? -
我猜你已经执行了第一个查询,然后是第二个。之后第二个查询从第一个开始使用缓存并且“快速”
-
我也是这么想的,但是无论我运行查询多少次以及以什么顺序运行查询,时间都是一样的。
-
我不确定,但是如果它改变了某些东西,你可以尝试使用“”这个运算符而不是“!=”和 c
-
我很好奇,我真的不喜欢优化器如何从一个查询到另一个类似的查询发生如此大的变化。 +1
标签: mysql sql query-performance