由于性能问题, 我尝试避免执行Count( )。 (即 从用户中 选择COUNT( ))
如果我在phpMyAdmin中运行以下命令,则可以:
SELECT SQL_CALC_FOUND_ROWS * FROM Users; SELECT FOUND_ROWS();
它将返回行数。即用户数量。
但是,如果我在PHP中运行,则无法执行以下操作:
$query = 'SELECT SQL_CALC_FOUND_ROWS * FROM Users; SELECT FOUND_ROWS(); '; mysql_query($query);
似乎PHP不希望传入两个查询。那么,我该怎么做呢?
SQL_CALC_FOUND_ROWS仅在使用LIMIT子句的情况下才有用,但仍想知道不使用会发现多少行LIMIT。
SQL_CALC_FOUND_ROWS
LIMIT
考虑一下它是如何工作的:
SELECT SQL_CALC_FOUND_ROWS * FROM Users;
您正在强制数据库检索/解析表中的所有数据,然后将其丢弃。即使您不打算检索任何行,DB Server仍会假设您需要该数据,而仍将开始从磁盘中提取实际数据。
用人类的话来说,您购买了超级杂货店的全部内容,但从收银员的架子上扔掉了除口香糖外的所有东西。
而做:
SELECT count(*) FROM users;
让DB引擎知道,尽管您想知道有多少行,但您不必关心实际数据。在大多数任何智能DBMS上,引擎都可以从表的元数据中检索此计数,或者通过表的主键索引简单地运行,而无需触及磁盘上的行数据。