Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql是否优化IN子句_Mysql_Query Performance - Fatal编程技术网

mysql是否优化IN子句

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列中进行索引

当我执行这个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列中进行索引,然后可以使用内部联接 为了


看到每个人都指出要使用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