2012-03-28 116 views
0

我有我試圖索引數據庫MySQL數據庫索引性能問題

我所創建的指標如下:

CREATE INDEX <name> ON geoplanet_places(name(15)); 

當我運行以下查詢:

SELECT * FROM geoplanet_places WHERE name LIKE "vancouver%"; 

結果在不到1秒鐘內返回

當我運行此查詢(注意adition %'通配符):

SELECT * FROM geoplanet_places WHERE name LIKE "%vancouver%"; 

結果返回時間大大增加,有時會超過9秒鐘。這與數據庫建立索引之前的時間大致相同。

該數據庫有超過500萬條記錄,我明白它爲什麼會放慢速度。我想知道的是,如果無論如何在名稱之前使用通配符,而沒有在MySQL中發揮如此巨大的性能。

在此先感謝。

回答

1

MySQL索引是從列的前面部分創建的 - 第一個查詢在列的起始處查找'vancouver' - 完全在索引的15個字符之內。然而,第二個查詢在列中查找'vancouver'任何地方 - 不能保證它將在索引的15個字符之內(並且如果索引能夠看起來不是索引字符串部分的開始) - 如果查看查詢計劃,您可能會看到一個表掃描,其中引擎正在按順序查看列中的所有值。

它看起來有點像你應該調查MySQL的FULLTEXT索引 - 上次我看它時,它不夠好做搜索引擎,但它可能解決你的問題(它也看起來好像現代MySQL支持FULLTEXT InnoDB表上的索引以及歷史限制的MyISAM表)。

+0

完美地工作,感謝您的幫助! – ThreadedLemon 2012-03-28 06:20:14