我的数据库在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