mysql是否优化IN子句
当我执行这个mysql查询时 从t1中选择*其中列1在从t2中选择列1 到底发生了什么 我想知道它是否对每一行执行内部语句mysql是否优化IN子句,mysql,query-performance,Mysql,Query Performance,当我执行这个mysql查询时 从t1中选择*其中列1在从t2中选择列1 到底发生了什么 我想知道它是否对每一行执行内部语句 PS:我在t1中有300000行,在t2中有50000行,这需要花费大量的时间。连接会更快,即: select t1.* from t1 INNER JOIN t2 on t1.colomn1=t2.colomn1 尝试内部连接 SELECT t1.* FROM t1 INNER JOIN t2 ON t1.column1=t2.column1 您应该在第1列中进行索引
PS:我在t1中有300000行,在t2中有50000行,这需要花费大量的时间。连接会更快,即:
select t1.* from t1 INNER JOIN t2 on t1.colomn1=t2.colomn1
尝试内部连接
SELECT t1.*
FROM t1
INNER JOIN t2 ON t1.column1=t2.column1
您应该在第1列中进行索引,然后可以使用内部联接 为了
看到每个人都指出要使用JOIN,就好像它是同一个东西一样,我感到震惊。不是!,这里提供的信息不适用。例如,如果t2.column1有两个字符怎么办 =>假设t2.column1中没有双精度,那么是的,在所述列上放置一个唯一的索引,并使用联接结构,因为它更可读且更易于维护。如果它要更快;这取决于查询引擎从中得到什么。在MSSQL中,查询优化器可能会将它们视为同一事物;也许MySQL并不急于认识到这一点。。。不知道 =>假设t2.column1中可能存在双精度索引,则在所述列上放置一个非唯一索引,并重写SELECT中的WHERE。。在WHERE EXISTS中,从t2中选择*其中t2.column1=t1.column1。同样,主要是为了可读性和易于维护;查询引擎很可能会对它们进行相同的处理 要记住的是 始终确保有适当的索引,但不要过火 始终意识到真正发生的是对sql代码的解释;不是“直接翻译”。您可以用不同的方式编写相同的功能,以实现相同的目标。其中一些确实更能适应不同的情况。
如果只有10行,那么几乎所有内容都可以正常工作。如果您有10万行,那么值得检查查询计划。。。最有可能与10行的不同。在表t1和表t2中创建列1索引或唯一字段,这将有助于一个loti首先使用join,但它也不起作用如何不起作用?是不是很慢?返回不同的数据?正如uvais提到的,索引将有助于连接和子查询@Uriel_SVK的可能重复,速度很慢…我等了2-3分钟…然后取消了查询。。
CREATE INDEX index1 ON t1 (col1);
CREATE INDEX index2 ON t2 (col2);
select t1.* from t1 INNER JOIN t2 on t1.colomn1=t2.colomn1