我有一个正在尝试建立索引的数据库
我创建的索引如下:
CREATE INDEX <name> ON geoplanet_places(name(15));当我运行以下查询时:
SELECT * FROM geoplanet_places WHERE name LIKE "vancouver%";结果返回时间不到1秒
当我运行这个查询时(注意额外的'%‘通配符):
SELECT * FROM geoplanet_places WHERE name LIKE "%vancouver%";结果返回时间大大增加,有时超过9秒。这与索引数据库之前所用的时间大致相同。
数据库有500多万条记录,我能理解为什么它会变慢。我想知道的是,有没有办法在名字之前做通配符,而不会在MySQL中受到如此巨大的性能影响。
提前谢谢。
发布于 2012-03-28 13:15:43
MySQL索引是从列的前导部分创建的-第一个查询在列的开头查找“vancouver”-完全在索引的15个字符内。然而,第二个查询在列中的任何位置查找'vancouver‘-不能保证它将在索引的15个字符内(如果索引能够查找索引字符串部分开头以外的其他地方,我会非常惊讶)-如果您查看查询计划,您可能会看到一个表扫描,其中引擎将按顺序查找列中的所有值。
它看起来有点像你应该研究MySQL的FULLTEXT索引--上次我看过它的时候,它还不足以成为一个搜索引擎,但它可能会解决你的问题(它看起来也像现代的MySQL一样支持对InnoDB表和MyISAM表的全文索引)。
https://stackoverflow.com/questions/9901325
复制相似问题