我创建了一个带有单个表的 mySql 测试数据库来进行一些性能测试。 该表有 4 列:id、姓名、电子邮件、公司。
我在该表中填充了大约 800 000 行,其中包括 10 家不同的公司。
以下是结构的详细信息:
我创建了很多索引,我试图找出为什么以下查询不使用多个索引:
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/