Mysql 索引与 LIKE 和排序

标签 mysql indexing query-optimization

我创建了一个带有单个表的 mySql 测试数据库来进行一些性能测试。 该表有 4 列:id、姓名、电子邮件、公司。

我在该表中填充了大约 800 000 行,其中包括 10 家不同的公司。

以下是结构的详细信息:

The structure of the DB

我创建了很多索引,我试图找出为什么以下查询不使用多个索引:

SELECT * FROM test WHERE name like 'jo%' order by email

我原本预计时间会很短,但仍然需要 1 秒左右。 有什么想法吗?

第二个问题: 此请求 SELECT * FROM test WHERE company = 'GB' and name like 'jo%' order by email 所花费的时间与前一个请求完全相同。这不符合逻辑,因为只有 10% 的行以“GB”作为公司,因此限制性更强,并且存在索引(公司、名称、电子邮件)。

任何解释都会帮助我更好地优化它。

谢谢!

最佳答案

添加全文索引

ALTER TABLE 测试添加全文索引 'MyIndex'(name) (可能还要等一下)。

使用全文搜索 ( https://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html )。 在你的情况下,它将是

SELECT * FROM test WHERE MATCH(name) AGAINST ('jo*')

您还可以在其他列上添加全文索引,但不要过度 - 太多索引也会影响性能

关于Mysql 索引与 LIKE 和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53145411/

相关文章:

php - zf2.如何处理循环 cli 脚本中 mysql 连接的超时?

Java 在文件夹中搜索索引

python - 按行和列获取单元格的值

r - 使用 R,如何使用主成分创建和索引?

MySQL 使用临时排序;使用文件排序

MySQL - 多对一和排序

mysql - 从表中选择一个值内至少有两行的数据

mysql - 如何将两个查询合二为一并在单个查询中获得结果?

mysql - 为什么在对 SQL 查询 + 优化查询使用 LIMIT 时扫描类型从 ALL 更改为 RANGE

mysql - 在 MySQL 中,同一列有一个过滤器还是多个过滤器更快?