这是一个我从来没有得到明确答案的问题.我在这个例子中使用
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的内部工作原理以及这个问题的正确答案是什么?
谢谢,
狮子座
版权声明:本文为weixin_35682010原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。