SQL_CALC_FOUND_ROWS仅在使用
LIMIT子句的情况下才有用,但仍想知道不使用会发现多少行
LIMIT。
考虑一下它是如何工作的:
SELECt SQL_CALC_FOUND_ROWS * FROM Users;
您正在强制数据库检索/解析表中的所有数据,然后将其丢弃。即使您不打算检索任何行,DB Server仍会假设您需要该数据,而仍将开始从磁盘中提取实际数据。
用人类的话来说,您购买了超级杂货店的全部内容,但从收银员的架子上扔掉了除口香糖外的所有东西。
而做:
SELECt count(*) FROM users;
让DB引擎知道,尽管您想知道有多少行,但您不必关心实际数据。在大多数任何智能DBMS上,引擎都可以从表的元数据中检索此计数,或者通过表的主键索引简单地运行,而无需触及磁盘上的行数据。



