我有一个很大的MySQL表(大约15,000多行),我正在寻找一种方法来执行以下查询,但是以更有效的方式:
SELECT col, otherCol, theOtherCol
FROM table
WHERE anotherCol > 0
ORDER BY ohACol DESC
这个查询在我的VPS上占用了太多的RAM,我可以理解,因为它选择了超过15,000行。我确实知道15,000+中需要哪5个索引(按DESC顺序排序后)。我怎样才能将这5个放入我的结果集中,而不是全部15,000个?
答案 0 :(得分:0)
如果您有所需索引的列表,则可以向WHERE子句添加约束:
WHERE indexCol IN (1,2,3,4,5)
答案 1 :(得分:0)
只需使用分页查询来限制发送到应用程序服务器的数据量。见Using MySQL LIMIT to Constrain The Number of Rows Returned By SELECT Statement。例如,如果您的页面大小为100,则可以使用以下内容获取第一页的结果:
SELECT col, otherCol, theOtherCol
FROM table
WHERE anotherCol > 0
ORDER BY ohACol DESC
LIMIT 0, 100;
第二页是:
SELECT col, otherCol, theOtherCol
FROM table
WHERE anotherCol > 0
ORDER BY ohACol DESC
LIMIT 100, 100;
第三个:
SELECT col, otherCol, theOtherCol
FROM table
WHERE anotherCol > 0
ORDER BY ohACol DESC
LIMIT 200, 100;
因此,您必须控制应用程序中的分页。