这是一个我从未得到明确答案的问题。在此示例中,我正在使用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的内部工作原理以及对这个问题的正确回答是什么吗?
谢谢, Leo
IN
搜索,它将轻松击败临时表。 - N.B.