- 查詢緩存被禁用!
- 索引是100%在RAM加載
- 指數只有ID
1benchmark:Mysql查詢不使用主鍵
"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。
再次與極限測試之後:
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查詢需要更長的時間。
'LIMIT BigNumber,AnyNumber'已知很慢。 – 2011-12-28 18:02:13
更正:LIMIT mysql不使用主鍵作爲id。查詢開始生成行,當它碰到偏移行時,它開始輸出它們,直到達到row_count。你可以嘗試添加一個標題索引,看看是否有幫助(假設索引適合內存) – rene 2011-12-28 18:07:32