我有一個MySQL的現有查詢需要25分鐘才能在帶有SSD驅動器的新v5.6.14服務器上運行。MySQL批量鍵訪問 - 沒有好處?
它的簡單形式:
SELECT a.*, b.*
FROM table a
INNER JOIN table b
ON a.uid = b.uid;
有每個臺31萬行,並有UID之間的一個一對一的關係上的每個。另外,uid是兩個表的主鍵。這些表分別爲2k和4k,沒有比varchar(255)更寬的列。
我來自SQL Server後臺,並希望此查詢通過合併連接以秒爲單位運行。雖然我明白MySQL限於嵌套循環,但我想我會嘗試新的(5.6)批量鍵訪問優化,它與多範圍讀取增強功能一起使事情變得更快。但是,這隻能帶來很小的改善 - 降至24分鐘。
說明顯示沒有使用臨時表或文件夾,當啓用BKA時,可以看到:
|使用連接緩衝區(分批鍵訪問)|
相關optimser設置:
optimizer_switch=mrr=on
optimizer_switch=mrr_cost_based=off
optimizer_switch=batched_key_access=on
join_buffer_size=<increased 100x from default>
read_rnd_buffer_size=<increased 100x from default>
有什麼我錯過了什麼?或者僅僅是因爲固態硬盤足夠快而且BKA只對連續讀取小節盤有好處?
刪除a。*和b。*。而是使用字段名稱。 *將在查詢執行時選擇其他信息。 – Damodaran
謝謝@Damodaran。是的,實際上我只選擇了我需要的字段 - 但有幾十個字段 - 爲了簡潔起見,我用* s表示。 – user3044586