MySQL 数据库索引性能问题

标签 mysql database performance indexing

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

我创建的索引如下:

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 的性能造成如此巨大的影响。

提前致谢。

最佳答案

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

看起来你应该调查一下 MySQL 的 FULLTEXT索引 - 上次我看它时,它不足以制作搜索引擎,但它可能会解决你的问题(它看起来也好像现代 MySQL 支持 InnoDB 表以及历史上限制的 MyISAM 表上的 FULLTEXT 索引)。

关于MySQL 数据库索引性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9901325/

相关文章:

performance - 使用符号或数值方法加速 Matlab 积分计算?

python - 提高python代码的速度

php - 使用单连接查询从第二个表中获取所有行数据

java - MySQL 和 Eclipse 错误

php - mysql 组和过滤结果

sql - 如何在大型数据库的 sqlite 中为数据表行分配索引?

php - 插入错误编码后更新MySQL数据库中的数据

php - 如何使用 php 获得像 Google 一样的速度?

mysql - Wordpress 通过我的 sql 从帖子中获取所有类别

MySQL 过程返回空