Performance
最佳性能索引 - MySQL
我有一個與性能數據庫 MySQL 相關的問題。我有這樣的查詢,裡面有大數據:
SELECT * FROM tableA a INNER JOIN tableB b ON a.id = b.id AND a.code = b.code INNER JOIN tableC c ON a.uniq = c.uniq WHERE a.date = '2020-01-01' AND a.type = 'X' AND b.merk = 'New';
我的問題是,使用單索引或多列索引哪個更好?
前任 :
表 A 中的索引(範例 1):
- idx1(merk、程式碼、日期、類型)
- idx2(日期)
- idx3(品牌)
- idx4(程式碼)
- idx5(類型)
表 A 中的索引(範例 2):
- idx1(merk、程式碼、日期、類型)
- idx2(品牌、程式碼)
- idx3(日期,類型)
什麼是更好的?範例 1 還是範例 2?請解釋一下。
注意:也許 tableA 會在未來的另一個查詢中獲得 varian WHERE
謝謝
該引擎將只能使用每個表的一個索引,因此雖然其他索引可能會在將來幫助您處理其他查詢,但它們的好處將僅限於幫助您處理此特定查詢。
鑑於我們對您的查詢的了解以及對錶和插入模式的有限了解,我建議以下內容。
Table A - (Date, Type) Table B - (merk, ID, Code) Table C - (Uniq)
當然,如果您能夠限制結果集列(擺脫 SELECT *),那麼索引中的其他列可能會有所幫助。
上面的這些索引將允許引擎快速查找并快速找到它想要的行。
我確實有一個關於表 B 上的“merk”的問題。如果這類似於一種狀態的變化,那麼我不會在它上面建立索引,只留下一個關於 ID 和程式碼的索引。如果欄位的值經常變化,那麼它通常是一個糟糕的索引候選,因為它會導致很多碎片。
最好的結果可以用下面的索引來估計:
Table A - (id, uniq, date, code, type) Table B - (id, code, merk) Table C - (uniq)