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查询需要更长的时间。
答案 0 :(得分:2)
你可以改为运行:
SELECT title
FROM posts
WHERE id >= ?
LIMIT 15
它不等同于LIMIT ?, 15
,但会使用索引。
您还可以查看related article。