我们已经创建了一个索引,特别是针对一个查询,但我发现该查询需要 5 到 6 秒的时间来执行。我尝试使用以下查询获取未使用的索引,我注意到该索引列在未使用的索引列表中。请建议如何为以下查询获得更好的性能。
查询where子句:WHERE parsedjobdescription IS NOT NULL AND is_updated != 0
索引:KEYidx_jobs_feed_parsedjobdescription_is_updated(
parsedjobdescription(700),
is_updated)
未使用的索引:SELECT * FROM sys.schema_unused_indexes;
列:parsedjobdescription varchar(50000) DEFAULT NULL is_updated tinyint(1) DEFAULT '0'
解释查询:
可能的键:idx_jobs_feed_parsedjobdescription_is_updated,idx_is_updated
键:idx_jobs_feed_parsedjobdescription_is_updated
密钥长度:703
行数:1
过滤:50.0
P粉2327937652024-04-01 09:01:20
禁止使用索引的两列的三件事:
IS NOT NULL - 一旦达到范围,其余列将不会被使用。
is_updated != 0 -- 这也是一个“范围”。
索引前缀有问题。
INDEX(parsedjobdescription(700), ... -- won't get past that prefix to use anything after it.
如果测试是 is_updated = 1
,您可以翻转索引(或添加另一个索引):
INDEX(is_updated, parsedjobdescription(100))