具有like和ordering的mysql索引

nwo49xxi  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(348)

我用一个表创建了一个mysql测试数据库来进行一些性能测试。此表有4列:id、name、email、company。
我在这张table上填了大约80万行,包括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”作为company,所以它的限制性要大得多,并且存在一个索引(company、name、email)。
任何解释都能帮助我更好地优化它。
谢谢!

yjghlzjz

yjghlzjz1#

添加全文索引 ALTER TABLE test ADD FULLTEXT INDEX 'MyIndex'(name) (这可能需要一段时间)。
使用全文搜索(https://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html). 你的情况是 SELECT * FROM test WHERE MATCH(name) AGAINST ('jo*') 您也可以在其他列上添加全文索引,但不要过度-索引太多也会影响性能

q1qsirdb

q1qsirdb2#

WHERE company = 'GB' and name like 'jo%'

需要“综合”索引: INDEX(company, name) --按这个顺序。
因为“范围”( LIKE 'jo%' ),索引无法帮助 ORDER BY . 所以, EXPLAIN 必须显示“文件排序”。别担心。
(请提供屏幕截图 SHOW CREATE TABLE ,尤其是性能问题。)
(the) FULLTEXT 另一个答案中的建议不太可能比我对示例查询的答案快。在其他情况下可能更快。)

相关问题