gpt4 book ai didi

mysql - 在 WHERE 子句中使用 IN 在 MySQL 中执行内部联接时避免全表扫描

转载 作者:行者123 更新时间:2023-11-30 23:12:37 26 4
gpt4 key购买 nike

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

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)

最佳答案

看来您正在按 mysql 认为选择性不够的列进行过滤。当过滤器的基数太低时(即,该过滤器的不同行数很低),mysql 在大多数情况下准确地认为 fts 会更快。

要确认,请显示 SELECT COUNT(DISTINCT tn.tid) FROM term_node tnSELECT COUNT(*) FROM term_node tn

的结果

关于mysql - 在 WHERE 子句中使用 IN 在 MySQL 中执行内部联接时避免全表扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19231459/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com