搜索

首页  >  问答  >  正文

索引可用但仍未使用-MySQL

我们已经创建了一个索引,特别是针对一个查询,但我发现该查询需要 5 到 6 秒的时间来执行。我尝试使用以下查询获取未使用的索引,我注意到该索引列在未使用的索引列表中。请建议如何为以下查询获得更好的性能。

查询where子句:WHERE parsedjobdescription IS NOT NULL AND is_updated != 0

索引:KEYidx_jobs_feed_pa​​rsedjobdescription_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_pa​​rsedjobdescription_is_updated,idx_is_updated

键:idx_jobs_feed_pa​​rsedjobdescription_is_updated

密钥长度:703

行数:1

过滤:50.0

P粉668019339P粉668019339233 天前416

全部回复(1)我来回复

  • P粉232793765

    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))

    回复
    0
  • 取消回复