我有一個特定的結構,我想要重寫,以便它運行更快的MySQL查詢。目前運行速度很慢,需要大約255秒才能執行。如果我刪除了連接,它將在10秒內運行<。它的目的是一次從表A獲得100行記錄,只要用戶希望看到更多的行。製作限制X,Y MySQL查詢連接運行更快
我懷疑這個查詢花了很長時間,因爲它在連接上發現的不止是前100行。這是真的嗎?如果是這樣,有沒有辦法在從主表中獲取行之後重寫查詢來完成連接?
數據來自'主'表A,它具有日期時間字段(START_TIME)和多個帶字符串值的表的外鍵(表,B,C,D)。
表A有250萬行。表B有600K行。 表A在START_TIME上有一個索引。表B有一個ID值的索引。
這是查詢的基本形式。我不想在START_TIME上設置上限,因爲我總是希望從查詢中獲取100條記錄。我使用了少於100條記錄的響應來指示數據庫中沒有更多記錄。
SELECT
A.START_TIME, A.F1, A.F2, B.STRING
FROM
A
INNER JOIN B ON A.B_ID = B.ID
WHERE
A.START_TIME >= '2015-03-22 05:23:44'
LIMIT 0, 100;
這裏是解釋。對不起,格式爲:
# id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
1, SIMPLE, B, index, PRIMARY, FSN, 95, , 1, Using index; Using temporary; Using filesort
1, SIMPLE, A, ref, A_ix_B_ID,A_ix_C, A_ix_B_ID, 4, ag100_a$$burnaby.B.ID, 2, Using where
您可以使用'ctrl-k'將文本格式設置爲代碼。 –
現在你必須嘗試每次添加一個表格http://importblogkit.com/2015/05/how-do-you-eat-an-elephant/你應該嘗試每一個選擇類型索引 –
這裏一次添加一個表的結果:僅表A:8.7秒,表A和B:255秒。問題仍然存在,我的原始問題仍然存在:是否有一種重構此查詢的方式,以便在從表A檢索記錄之後完成連接。這是非常重要的,因爲這是一個非常常見的查詢。 – user3341576