当我发现我的数据库存在巨大问题时,我正处于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,...)不是来自数据库。用户选择要删除的付款,然后在下一个屏幕上显示付款详细信息。
仅供参考,付款表有超过一百万条记录:)
答案 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
上有一个索引(这应该是主键)。