[英]MySql Indexing for multiple columns
我的表包含列 c1、c2、c3、c4、c5、c6,我有超過 64 個這樣的查詢組合
我的查詢是
where (c1=1 and c2=2 and c3=3)
where (c1=1 and c2=2 and c3=3 and c4 =4 and c5 =5 )
where (c1=1 and c2=2 and c3=3 and c4=4)
where (c1=1 and c2=2 and c3=3 and c6)
where ( c2=2 and c3=3)
..等我使用此查詢為多個列創建了索引
create INDEX `allpair` ON TABLE_NAME (c1,c2,c3,c4,c5,c6);
但它不適用於所有組合我是否需要為所有組合添加索引?
沒有好的答案。
您建議的索引有助於某些涉及c1=constant
的查詢,但如果缺少該索引則無濟於事。 而且,您進入該多列索引的距離越遠,這些列的用處就越小。 也就是說,您的allpair
對您的查詢 5 沒有用。
部分答案:
=constant
; 這是因為“范圍”測試也沒有優化。 如果您只有這 5 個查詢,那么INDEX(c2,c3,c1)
(或INDEX(c3,c2,c1)
)可能是最好的。
您無法提供所有組合。 一個表上有 64 個索引的硬性限制。 5-10 是實際限制。
常數是數字嗎? 你需要數字的“范圍”嗎? 其中一些是字符串嗎? [如果您通過僅顯示=number
來過度簡化問題,您將阻止我提供其他一些解決方案。]
更多的
>
, BETWEEN
, !=
, LIKE 'abc%'
,有時IN
等)——索引不會超過該列 go 。 因此,傾向於將此類列放在復合索引的末尾。WHERE
中的 2 個范圍——優化器將決定使用哪個范圍; 通常它會選擇更好的一個。FOREIGN KEY
- 這是在INSERTing
和INDEX
時使用的約束的組合,可能對SELECT
有用。 添加外鍵時,如果已經有有用的INDEX
,則外鍵不會添加多余的索引。VARCHAR
,而不是TEXT
)——當涉及到索引時,將它們想象成類似於數字。DATE
、 DATETIME
、 TIMESTAMP
(等等)——我們可以說,這些是美化的數字。 但是,它們通常用作“范圍”。=
或范圍測試。 我的索引建議同樣適用於每一個。有關索引的更多信息: Index Cookbook和Entity-Attribute-Value
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.