【问题标题】:The MYSQL "explain query" shows "key" NULLMYSQL "解释查询" 显示 "key" NULL
【发布时间】:2012-09-12 14:23:40
【问题描述】:

我已经让mysql解释了以下查询:

SELECT carid,pic0,bio,url,site,applet 
FROM cronjob_reloaded 
WHERE 
carid LIKE '%bmw%' 
OR 
carid LIKE '%mer%' 
OR 
age BETWEEN '5' AND '10' 
OR 
category IN ('used') 
ORDER BY CASE 
    WHEN carid LIKE '%bmw%' OR carid LIKE '%mer%' THEN 1 
    WHEN age BETWEEN '5' AND '10' THEN 2 
    ELSE 3 
END 

这里是解释结果:

EXPLAIN SELECT carid, pic0, bio, url, site, applet
FROM cronjob_reloaded
WHERE carid LIKE '%bmw%'
OR carid LIKE '%mer%'
OR carid IS NOT NULL
AND age
BETWEEN '5'
AND '10'

我不明白这个:

  1. 为什么键为NULL?

  2. 我可以让这个查询更快吗?它需要 0.0035 秒 - 对于 1000 行的表来说,这是慢还是快?

在我的表中,carid 是表的主键。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    MySQL 没有找到任何用于查询的索引。

    查询速度取决于您的 CPU,对于这么少的行,还取决于可用 RAM、系统负载和磁盘速度。您可以使用BENCHMARK 多次运行查询并以更高的精度对其计时(例如,执行 100,000 次并将总时间除以 100,000)。

    至于索引问题:您的WHERE 子句涉及caridagecategory(间接performerid)。你应该首先索引category(因为你要求直接匹配),age,最后是carid

    CREATE INDEX test_index ON cronjob_reloaded ( category, age, carid );
    

    这将 MySQL 查询的WHERE 阶段所需的大部分信息汇集到单个索引操作中。

    添加performerid 可能会加快速度,也可能不会,这取决于几个因素。我会开始没有,也许稍后会测试它。

    更新:原来的查询好像变了,没有performerid出现了。

    最后,1000 行通常只需要很少的时间,以至于 MySQL 甚至可能决定根本不使用索引,因为加载所有内容并让WHERE 自行整理会更快。 p>

    【讨论】:

    • 非常好,我应该在哪里添加 CREAT INDEX 语法?所以你的意思是修改表结构?
    • 命令可以通过任何管理界面(命令行、phpMyAdmin、HeidiSQL...)发送到MySQL;表结构不会直接受到影响。如果索引不起作用,您可以使用“ALTER TABLE cronjob_reloaded DROP INDEX test_index;”将其删除。数据也不受影响。
    【解决方案2】:

    根据文档:

    “如果 key 为 NULL,MySQL 没有找到用于更有效地执行查询的索引。”

    官方文档请参考以下链接。

    Mysql Doc

    编辑:

    这里是索引的链接

    How mysql Index work's - SO

    How to create index

    希望有帮助!

    【讨论】:

    • 我已尝试将其添加到查询中:USE INDEX (carid) 但出现此错误:表 'cronjob_reloaded' 中不存在键 'carid'
    • 如果你想这样做,你需要创建一个索引。请参阅我的答案以了解可能性 - 不要相信它,但要进行实验。
    • 您可能打算使用 USE INDEX PRIMARY。你也可以做 FORCE INDEX PRIMARY 看看哪个更快。
    猜你喜欢
    • 1970-01-01
    • 2012-08-06
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 2013-10-11
    相关资源
    最近更新 更多