首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySQL中使用in IN WHERE子句执行内连接时避免全表扫描

问在MySQL中使用in IN WHERE子句执行内连接时避免全表扫描
EN

Stack Overflow用户
提问于 2013-10-08 01:56:07
回答 1查看 733关注 0票数 1

在MySQL中使用in IN WHERE子句执行内部连接时,如何避免全表扫描?例如:

代码语言:javascript
复制
explain SELECT
-> COUNT(DISTINCT(n.nid))
-> FROM node n
-> INNER JOIN term_node tn ON n.nid = tn.nid
-> INNER JOIN content_type_article ca ON n.nid = ca.nid
-> WHERE tn.tid IN (67,100)
-> ;
+----+-------------+-------+--------+----------------------------------+---------+---------+----------------------+-------+--------------------------+
| id | select_type | table | type   | possible_keys                    | key     | key_len | ref                  | rows  | Extra                    |
+----+-------------+-------+--------+----------------------------------+---------+---------+----------------------+-------+--------------------------+
|  1 | SIMPLE      | tn    | ALL    | PRIMARY,nid                      | NULL    | NULL    | NULL                 | 42180 | Using where              |
|  1 | SIMPLE      | ca    | ref    | nid,field_article_date_nid_index | nid     | 4       | drupal_mm_qas.tn.nid |     1 | Using index              |
|  1 | SIMPLE      | n     | eq_ref | PRIMARY                          | PRIMARY | 4       | drupal_mm_qas.ca.nid |     1 | Using where; Using index |
+----+-------------+-------+--------+----------------------------------+---------+---------+----------------------+-------+--------------------------+
3 rows in set (0.00 sec)
EN

回答 1

Stack Overflow用户

发布于 2013-10-08 02:19:22

您似乎是在按mysql认为不够有选择性的列进行筛选。当筛选器的基数太低(即,该筛选器的不同行的数量很低)时,mysql认为,在大多数情况下,fts会更快。

为了确认,请显示SELECT COUNT(DISTINCT tn.tid) FROM term_node tn和SELECT COUNT(*) FROM term_node tn的结果

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

https://stackoverflow.com/questions/19231459

复制
相关文章

相似问题

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