Mysql 如何在约束查询中进行优化?

Mysql 如何在约束查询中进行优化?,mysql,sql,select,query-optimization,in-clause,Mysql,Sql,Select,Query Optimization,In Clause,以下是我的疑问 SELECT * FROM t1 WHERE t1.record_id IN ( SELECT t2.record_id FROM t2 INNER JOIN t3 ON CONCAT(t2.case_number,t2.courtfile_type) = CONCAT(t3.case_number,t3.courtfile_type)) 它在约束中包含了,从数据库中提取结果需要花费大量的时间 如何优化此查询?尝试以下操作: 使用JOIN SELE

以下是我的疑问

SELECT * FROM t1 WHERE t1.record_id IN (
    SELECT  t2.record_id FROM  t2 
        INNER JOIN t3 ON CONCAT(t2.case_number,t2.courtfile_type) = CONCAT(t3.case_number,t3.courtfile_type))
它在约束中包含了
,从
数据库中提取结果需要花费大量的时间

如何优化此查询?

尝试以下操作:

使用JOIN

SELECT DISTINCT t1.* 
FROM t1 
INNER JOIN t2 ON t1.record_id = t2.record_id 
INNER JOIN t3 ON t2.case_number = t3.case_number AND t2.courtfile_type = t3.courtfile_type
使用存在的文件

SELECT * 
FROM t1 
WHERE EXISTS (SELECT t2.record_id 
                  FROM  t2 INNER JOIN t3 ON t2.case_number = t3.case_number AND t2.courtfile_type = t3.courtfile_type
                  WHERE t1.record_id = t2.record_id )

使用
EXPLAIN
关键字检查查询的执行计划,并对表进行适当的索引。

是否所有用于查询和连接的字段都有索引。如果没有,请添加索引并再次尝试解释同一查询。请记住,使用
连接可能会导致重复,如果是这种情况,则选择必须是
选择不同的t1.*
(尽管我不主张使用select*,因为我不知道t1中有哪些列,我别无选择,只能编写它)@GarethD我也同意你关于
SELECT*
的观点。但是我不知道表的结构,所以我写了
*