2011-10-15 35 views
0

我正在网站中实现自动填充字段,并且我的端点查询mysql以获取数据。该特定字段只能从数据库“列表”中检索,其中有大约600,000个条目,其中只有4000个是唯一的。一天一次左右,将添加一个新的独特列表项目。 我使用这样的通话,这样的查询是无论用户已开始在自动完成框中键入:如何在mysql中加快此选择区别查询

SELECT DISTINCT item FROM list WHERE item like '%query%' LIMIT 10; 

这个查询大约需要0.8毫秒,大部分的时间是由于SELECT DISTINCT,我相信。有什么方法可以提高此任务的性能吗? 我很好,创建新的表/视图,但我不知道什么会帮助。

+0

你只是问如何让我的无车的汽车走得更快,除非你给更多的信息。请张贴结果:解释扩展SELECT DISTINCT项目FROM列表WHERE项目如'%query%'LIMIT 10;显示警告 –

回答

2

当您在LIKE查询的开头使用%符号时,将不会使用任何索引,并且无论您的索引如何,您的表的每一行都将被扫描。

想想有字母标签的地址簿,如果我在寻找'Mads%',我可以指出我的手指,以信M进行阅读,但如果我找'%dse%',我已经阅读每个条目。

  • 如果可以,你应该在字符串的开头下降百分号,在这种情况下对item该指数将使用(一定要添加它,你也可以索引字段的情况下,部分这是一个很长的领域)。
  • 否则,您应该使用full text search来代替。
+0

我不知道这个查询会在MySQL中表现出什么样的行为,但是如果存在的话,它可以使用'item'上的索引更快地得到回答 - 它只需要扫描4,000个条目而不是600,000条目。 –