Mysql查询优化
下面是我的表格结构Mysql查询优化,mysql,optimization,query-optimization,Mysql,Optimization,Query Optimization,下面是我的表格结构 Table 1 id name Table 2 id table1_id 我希望表1中的行在表2中没有参考值 示例数据: Table 1 id name 1 demo 2 demo2 3 demo3 表2 id table1_id 1
Table 1
id
name
Table 2
id
table1_id
我希望表1中的行在表2中没有参考值
示例数据:
Table 1
id name
1 demo
2 demo2
3 demo3
表2
id table1_id
1 1
2 1
3 1
4 3
5 3
因此,表2中没有表1_id 2的值。我要表1中的id 2
下面是我尝试过的查询id:
SELECT l.id FROM Table1 l WHERE l.id NOT IN (SELECT DISTINCT(r.id) FROM table2 r);
这将返回一个正确的结果,但处理该结果需要2分钟以上
在表1中,我有4000行,在表2中,我有40000行
对上述问题或任何替代解决方案进行优化
SELECT * FROM table1 LEFT JOIN table2
ON table1.id=table2.table1_id
WHERE table2.table1_id IS NULL
或
或
为
Table1.id
和Table2.Table1\u id
创建索引,然后尝试以下查询:
SELECT Table1.id FROM Table1
WHERE Table1.id NOT IN (SELECT Table2.id FROM Table2 group by Table2.table1_id);
为
Table1.id
和Table2.Table1\u id
创建索引,然后尝试以下查询:
SELECT Table1.id FROM Table1
WHERE Table1.id NOT IN (SELECT Table2.id FROM Table2 group by Table2.table1_id);
你想做的是找到孤儿记录,对吗 显示第一个(左)表中的所有记录,并且匹配值形成其他值或空值(不匹配)的联接称为左联接。我认为左路会合也能起到同样的作用,但不会更快。连接通常较慢 我找到了一个解释得很好的地方-
不过,尝试使用联接并告诉我们您的结果是否与预期的结果相同并没有什么坏处。您想要实现的是找到孤立记录,对吗 显示第一个(左)表中的所有记录,并且匹配值形成其他值或空值(不匹配)的联接称为左联接。我认为左路会合也能起到同样的作用,但不会更快。连接通常较慢 我找到了一个解释得很好的地方-
不过,尝试使用联接并告诉我们您的结果是否与预期的结果相同并没有什么坏处。表2中的table1\u id将不会有空值。我的本地mysql已随此查询一起消失了(@Avinash:您应该在列上有索引。表2中的table1\u id将不会有空值。我的本地mysql已随此查询一起消失..:(@Avinash:您应该在列上有索引当我尝试在第二个表中提供索引时,我得到了以下错误:#1089-前缀键不正确;使用的键部分不是字符串,使用的长度比键部分长,或者存储引擎不支持唯一前缀keysALTER table
sites\u check
域检查结果代码>添加索引主域Id
(nDomainID
(10))尝试此在表2上创建索引表2\u表1\u Id(表1\u Id)
当我试图在第二个表中给出索引时,我得到了以下错误:#1089-前缀键不正确;使用的键部分不是字符串,使用的长度比键部分长,或者存储引擎不支持唯一前缀keysALTER tablesites\u check
domaincheckresult
添加索引主域Id代码>(nDomainID
(10))尝试此创建索引表2\u表1\u表2上的id(表1\u id)
SELECT Table1.id FROM Table1
WHERE Table1.id NOT IN (SELECT Table2.id FROM Table2 group by Table2.table1_id);