Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我怀疑我已经知道了这个问题的答案,但是......
给定以下 3 个 MySQL 语句:
SELECT SQL_CALC_FOUND_ROWS title FROM STUFF LIMIT 1000000, 1; SELECT SQL_CALC_FOUND_ROWS title FROM STUFF LIMIT 1; SELECT title FROM STUFF;
三者之间的性能有显着差异吗?
SQL_CALC_FOUND_ROWS需要遍历所有行来计算答案,因此 1 和 2 之间没有时间差(如果表中的行少于 1000000 行,第一个查询可能不会返回任何内容)
SQL_CALC_FOUND_ROWS
第三个查询将输出整个表,而不仅仅是计算其行数。
这取决于,如果您添加ORDER BY并索引正在排序的列,它可能会明显更快。
ORDER BY
这是因为它将在不扫描和排序完整结果集的情况下执行。使用索引将产生一个索引范围扫描,该扫描将在生成所需的行数后立即启动和停止。