MySQL 选择,按 DESC 排序,获取特定索引
MySQL Selecting, Ordering by DESC, and getting specific indexes
我有相当大的 MySQL table(大约 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 个?
如果您有所需索引的列表,您可以向 WHERE 子句添加约束:
WHERE indexCol IN (1,2,3,4,5)
只需使用分页查询来限制发送到应用程序服务器的数据量。参见 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;
因此您必须控制应用程序中的分页。
我有相当大的 MySQL table(大约 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 个?
如果您有所需索引的列表,您可以向 WHERE 子句添加约束:
WHERE indexCol IN (1,2,3,4,5)
只需使用分页查询来限制发送到应用程序服务器的数据量。参见 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;
因此您必须控制应用程序中的分页。