首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL数据库索引性能问题

MySQL数据库索引性能问题
EN

Stack Overflow用户
提问于 2012-03-28 12:50:20
回答 1查看 1K关注 0票数 0

我有一个正在尝试建立索引的数据库

我创建的索引如下:

代码语言:javascript
复制
CREATE INDEX <name> ON geoplanet_places(name(15));

当我运行以下查询时:

代码语言:javascript
复制
SELECT * FROM geoplanet_places WHERE name LIKE "vancouver%";

结果返回时间不到1秒

当我运行这个查询时(注意额外的'%‘通配符):

代码语言:javascript
复制
SELECT * FROM geoplanet_places WHERE name LIKE "%vancouver%";

结果返回时间大大增加,有时超过9秒。这与索引数据库之前所用的时间大致相同。

数据库有500多万条记录,我能理解为什么它会变慢。我想知道的是,有没有办法在名字之前做通配符,而不会在MySQL中受到如此巨大的性能影响。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-28 13:15:43

MySQL索引是从列的前导部分创建的-第一个查询在列的开头查找“vancouver”-完全在索引的15个字符内。然而,第二个查询在列中的任何位置查找'vancouver‘-不能保证它将在索引的15个字符内(如果索引能够查找索引字符串部分开头以外的其他地方,我会非常惊讶)-如果您查看查询计划,您可能会看到一个表扫描,其中引擎将按顺序查找列中的所有值。

它看起来有点像你应该研究MySQL的FULLTEXT索引--上次我看过它的时候,它还不足以成为一个搜索引擎,但它可能会解决你的问题(它看起来也像现代的MySQL一样支持对InnoDB表和MyISAM表的全文索引)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9901325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档