首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql - Explain键为空

Mysql - Explain键为空
EN

Stack Overflow用户
提问于 2018-03-27 21:09:10
回答 1查看 1.1K关注 0票数 1

在我的表格电子邮件中

代码语言:javascript
复制
mysql> explain select * from Emails where email_id IN  (2029000006126024, 2029000004564319, 2029000000692079, 2029000004564202);
+----+-------------+---------------+------------+------+----------------------------------------+------+---------+------+--------+----------+-------------+
| id | select_type | table         | partitions | type | possible_keys                          | key  | key_len | ref  | rows   | filtered | Extra       |
+----+-------------+---------------+------------+------+----------------------------------------+------+---------+------+--------+----------+-------------+
|  1 | SIMPLE      | Emails        | NULL       | ALL  | Emails_FK1_IDX,Emails_IDX2             | NULL | NULL    | NULL | 785984 |    57.70 | Using where |
+----+-------------+---------------+------------+------+----------------------------------------+------+---------+------+--------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

并且已经为列"email_id“创建了索引,但正在为整个表运行查询。

和create table查询是

代码语言:javascript
复制
CREATE TABLE `Emails` (
`EMAIL_REPORT_ID` bigint(19) NOT NULL,
`CAMPAIGN_EMAIL_ID` bigint(19) NOT NULL,
`SENT_DATE` bigint(19) DEFAULT NULL,
`EMAIL_ID` bigint(19) NOT NULL,
`BOUNCE` int(10) DEFAULT '0',
`BOUNCED_DATE` bigint(19) DEFAULT NULL,
`SPAM` tinyint(1) DEFAULT '0',
`OPT_OUT` tinyint(1) DEFAULT '0',
`IGNORED` int(10) DEFAULT '0',
`CMP_CONTENT_ID` bigint(19) DEFAULT NULL,
`RESTRICT` int(10) DEFAULT '0',
`TIME_ZONE` varchar(100) DEFAULT NULL,
`GMT_DEVIATION` varchar(10) DEFAULT NULL,
`CMP_COMMENTS_COUNT` int(10) DEFAULT '0',
`IGNORED_BY_TRAP` int(10) DEFAULT '0',
PRIMARY KEY (`EMAIL_REPORT_ID`),
KEY `Emails_FK1_IDX` (`CAMPAIGN_EMAIL_ID`),
KEY `Emails_FK2_IDX` (`CONTACT_ID`),
KEY `Emails_FK3_IDX` (`RECIPIENT_SELECTION_ID`),
KEY `Emails_FK4_IDX` (`CMP_CONTENT_ID`),
KEY `Emails_IDX1` (`SENT_DATE`),
KEY `Emails_IDX2` (`CAMPAIGN_EMAIL_ID`),
KEY `Emails_IDX3` (`EMAIL_REPORT_ID`,`CAMPAIGN_EMAIL_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

专家们,请告诉我如何解决这个问题。

EN

回答 1

Stack Overflow用户

发布于 2018-03-27 21:50:05

如果MySQL估计您搜索的值可能与表的大部分内容相匹配,它将不使用该索引。

具体的阈值没有文档记录,但根据我的经验,当您的查询与表的大约20%匹配时,优化器可以从查询逻辑中推断出这一点,它认为进行表扫描并过滤掉它检查的行比使用索引更有效。

如果您不同意,可以使用FORCE INDEX hint告诉优化器表扫描的开销太大,如果有合适的索引,它应该更喜欢使用索引。

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

https://stackoverflow.com/questions/49513763

复制
相关文章

相似问题

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