两个表之间的查询慢
Posted
技术标签:
【中文标题】两个表之间的查询慢【英文标题】:Query Slowness Between Two Tables 【发布时间】:2021-04-17 17:18:28 【问题描述】:如果在我的 "table1" 和 "table2" 表中存在与 "parent_id" 的值匹配的结果,我想获取 "table1" 表中的行数。
但是 SQL 查询耗时太长。
table1 中有 100,000 行。
table2 中有 40,000 行。
供您试用的表格数据文件 见:https://pastebin.pl/view/raw/ddf8c467
表结构
CREATE TABLE table1 (id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT ,
parent_id INT(11) UNSIGNED NOT NULL ,
tes1 INT(1) NOT NULL , PRIMARY KEY (id)) ENGINE = MyISAM;
CREATE TABLE table2 (id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT ,
parent_id INT(11) UNSIGNED NOT NULL ,
tes2 INT(1) NOT NULL , PRIMARY KEY (id)) ENGINE = MyISAM;
我使用的 SQL 查询
SELECT COUNT(A.id) AS total
FROM table1 A
LEFT JOIN table2 B ON A.parent_id = B.parent_id
WHERE B.id IS NOT NULL
【问题讨论】:
在表 B 的 parent_id 上创建索引,如果可能,使用 INNODB 这不是 sql server。标签已移除 您好@BerndBuffen,我根据您的建议应用了以下 SQL 代码并且它有效。非常感谢。索引会有副作用吗?ALTER TABLE
table2`添加索引(`parent_id);
用索引 mysql 可以找到上面的。阅读:mariadb.com/kb/en/getting-started-with-indexes
【参考方案1】:
在表 B 上的 parent_id 上创建索引并尽可能使用 INNODB。
你也可以使用内连接
SELECT COUNT(A.id) AS total
FROM table1 A
INNER JOIN table2 B ON A.parent_id = B.parent_id;
【讨论】:
以上是关于两个表之间的查询慢的主要内容,如果未能解决你的问题,请参考以下文章