我的數據庫在mysql v5.x上運行。我有一個有5列的表T1,列C1是主鍵。 C1的類型是varchar(20)。它包含了像值約2000行:如何在mysql查詢中使用索引效率
fxg
axt3
tru56
and so on..
現在我的應用程序的任務是讀取輸入數據,發現如果輸入數據具有類似於表T1列C1發現了一個起步模式。例如:我的輸入可能顯示爲:
trx879478986
fxg87698x84
784xtr783utr
axt3487ghty
... and so on
因此,對於上面的輸入,我不得不返回「fxg87698x84」和「axt3487ghty」真假他人。我使用的查詢是:
select 1 from T1 where (? like concat(C1,'%'));
note: the ? is replaced by the input value got from the application.
的問題是我投入是巨大的(約1萬條記錄在30分鐘內被處理)和我的查詢速度不夠快。有關如何重新編寫查詢或強制使用索引的任何想法?即使我必須使用不同的對象結構,如果有幫助的話,我也可以做到。所以任何幫助將不勝感激。謝謝。
我要建議 - 只有我增加了一個「ORDER BY CHAR_LENGTH(C1)」爲有利於比賽的「 ATX12345'對'ATX' – symcbean 2010-09-23 12:47:13
+1,我正在輸入。這確實使用了索引,並且通過避免使用LIKE來避免如果C1包含'%'或'_'字符會發生什麼問題。 – bobince 2010-09-23 12:49:50
Thx爲輸入。但是我必須做的有效子串的組合是3個字符到20個字符,而額外的處理類型可以抵消我可能獲得的性能增益。 – Abdullah 2010-09-23 13:21:50