更快的方式执行SELECT ... WHERE id IN ...在mysql中

时间:2011-12-15 11:25:15

标签: mysql select where

当我发现我的数据库存在巨大问题时,我正处于uni项目的中间。使用wamp和一个庞大的(300Mb)数据库,但只有几个表我的查询非常慢:(所有表都是使用MyISAM引擎创建的。所有设置都是默认的,我没有任何优化经验。我需要思考一些更好的方法,但现在我的问题是什么是以下查询的最佳替代品:

SELECT * FROM `payments` WHERE id IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

我不能使用左连接或我在这里找到的任何类似解决方案,因为这些ID(1,2,3,4,5,...)不是来自数据库。用户选择要删除的付款,然后在下一个屏幕上显示付款详细信息。

仅供参考,付款表有超过一百万条记录:)

1 个答案:

答案 0 :(得分:4)

对于连续范围:

SELECT * FROM payments WHERE id BETWEEN 1 AND 10

如果范围不相交: 使用其中的值创建索引memory表。

CREATE TABLE mem_table (
  pk unsigned integer primary key
) ENGINE = MEMORY;

INSERT INTO mem_table (pk) VALUES (1),(2),...,(10);

SELECT p.* FROM payments p
INNER JOIN mem_table m ON (m.pk = p.id);

请参阅:http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html

<强> PS 确保在id上有一个索引(这应该是主键)。