首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL的“解释查询”显示"key“NULL。

问MYSQL的“解释查询”显示"key“NULL。
EN

Stack Overflow用户
提问于 2012-09-12 14:23:40
回答 2查看 14.9K关注 0票数 8

我让mysql解释了以下查询:

代码语言:javascript
复制
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 

下面是解释的结果:

代码语言:javascript
复制
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. 为什么键为空?
  2. 我能让这个查询更快吗?这需要0.0035秒-对于1000行表来说,这是慢的还是快的?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-12 14:33:18

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

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

至于索引问题:您的WHERE子句涉及carid、age、category (和间接performerid)。您应该首先在category上进行索引(因为您要求对它进行直接匹配)、age,最后是carid。

代码语言:javascript
复制
CREATE INDEX test_index ON cronjob_reloaded ( category, age, carid );

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

添加performerid可能会加快速度,也可能不会,这取决于几个因素。我会在没有的情况下开始,以后再测试。

更新:原来的查询似乎已经改变了,不再出现performerid了。

最后,1000行通常只需要很少的时间,以至于MySQL甚至可能决定根本不使用索引,因为加载所有数据并让WHERE自己排序更快。

票数 4
EN

Stack Overflow用户

发布于 2012-09-12 14:27:08

根据文件:

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

有关它的正式文件,请参阅下面的链接。

Mysql医生

编辑:

以下是索引的链接

mysql索引是如何工作的

如何创建索引

希望能帮上忙!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12390373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档