这是一个我从未得到明确答案的问题。我在这个例子中使用 MySQL。
给定一组相当大的值(比如说 500)。使用带有 IN() 子句的这些值搜索表是否更快:
SELECT * FROM table WHERE field IN(values)
或者通过在内存中创建一个临时表,用值填充它并将其连接到正在搜索的表中:
CREATE TEMPORARY TABLE `temp_table` (`field` varchar(255) NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO temp_table VALUES (values)
SELECT * FROM table t1 JOIN temp_table t2 ON t1.field = t2.field
两种方法都会产生相同的结果集。
我自己做了一些基本的基准测试,发现当处理超过 500 个值时,使用临时表比使用 IN() 子句更快。
有人可以向我解释 MySQL 的内部工作原理吗?这个问题的正确答案是什么?
谢谢,狮子座