Mysql Query不使用主键

时间:2011-12-28 17:56:46

标签: mysql mysqli primary-key

  • 已禁用查询缓存!
  • 索引在RAM中100%加载
  • index仅为ID

1benchmark:

"SELECT title FROM posts LIMIT ?, 15";
? = rand(1,183655);

EXPLAIN 
id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra
1   SIMPLE  posts   ALL     NULL    NULL    NULL    NULL    183637  

完成100次循环后,花了100多秒。

2Benchmark:

"SELECT title FROM posts WHERE id = 78845 OR id = 158738 OR id = 57065 OR id = 146797 OR id = 78918 OR id = 65227 OR id = 117987 OR id = 92541 OR id = 39782 OR id = 1958 OR id = 180384 OR id = 170758 OR id = 102227 OR id = 180223 OR id = 46391";

    in each loop every id is generated via rand(1,183655);

完成100次循环后,需要6秒才能完成并使用主键。

问题是我认为 LIMIT MySQL不会将主键用于 id

再次使用Limit测试后:

SECONDS:        LOOPS:  SQL:
41.560034990311 =    30 =   "SELECT title FROM posts LIMIT ?, 15";
36.302664995193 =    30 =   "SELECT title FROM posts ORDER BY id LIMIT ?, 15";
70.335160970688 =    30 =   "SELECT title FROM posts ORDER BY id ASC LIMIT ?, 15";
48.453547000885 =    30 =   "SELECT id, title FROM posts LIMIT ?, 15"

不知怎的,但我 100%肯定。我更新了我的VMware PHP5.1.6到PHP5.3 ,从那时起我注意到,这些LIMIT查询需要更长的时间。

1 个答案:

答案 0 :(得分:2)

你可以改为运行:

SELECT title 
FROM posts 
WHERE id >= ?
LIMIT 15

它不等同于LIMIT ?, 15,但会使用索引。

您还可以查看related article