SQL_CALC_FOUND_ROWS
е полезно само ако използвате LIMIT
клауза, но все пак искам да знам колко реда биха били открити без LIMIT
.
Помислете как работи това:
SELECT SQL_CALC_FOUND_ROWS * FROM Users;
Принуждавате базата данни да извлича/разбира ВСИЧКИ данни в таблицата и след това ги изхвърляте. Дори ако няма да извличате нито един от редовете, DB сървърът пак ще започне да изтегля действителни данни от диска при допускането, че ще искате тези данни.
По човешки, купихте цялото съдържание на супер магазина за хранителни стоки, но изхвърлихте всичко с изключение на опаковката дъвка от щанда до касата.
Като има предвид, че правиш:
SELECT count(*) FROM users;
позволява на DB машината да знае, че докато искате да знаете колко реда има, не можете да се интересувате по-малко от действителните данни. В повечето интелигентни СУБД машината може да извлече този брой от метаданните на таблицата или просто да премине през индекса на първичния ключ на таблицата, без изобщо да докосва данните от редовете на диска.