我有一個表 'TBL' 這樣的事情: ID BIGINT(20) - 主鍵,自動增量 字段1 場2 場3mysql按主鍵選擇順序。性能
這表有60萬個+行。
- 查詢: SELECT *從
tbl
ORDER BY ID LIMIT 600000,1採取1.68秒 - 查詢: SELECT ID,FIELD1從
tbl
ORDER BY ID LIMIT 600000,1採取1.69秒 - 查詢:從
tbl
ORDER SELECT ID由ID LIMIT 600000,1採取0.16秒 - 查詢:從
tbl
SELECT * WHERE ID = XXX取0.005秒
這些查詢在phpmyadmin中進行了測試。
而結果是查詢3和查詢4一起返回數據。 查詢1完成相同的工作,但要慢得多...
這看起來不合適我。 任何人都可以提供任何建議嗎?
P.S.我很抱歉格式化..我是這個網站的新手。
新的測試:
Q5:CREATE TEMPORARY TABLE tmptable AS(SELECT ID FROM tbl
WHERE ID LIMIT 600030,30); SELECT * FROM tbl
WHERE ID IN(SELECT ID FROM tmptable);需要0.38秒
我仍然不明白它是如何可能的。我重新創建了所有索引...我該怎麼辦這張桌子?手動刪除並重新填充它? :)
仍在讀取,但是快速提示:LIMIT 600000,1 - 表示它僅選擇1行起始行600000 – IGonza
錯過了',1'。在這種情況下,1/2和3之間的差別可能是緩存。 4仍然是一個直接查詢,而其他人仍然需要走索引 – Kevin
我在MySQL配置中將現金內存大小設置爲0,所以結果不會被緩存。 – IGonza