sql >> Database >  >> RDS >> Mysql

Totaal aantal rijen krijgen bij gebruik van LIMIT?

Gelukkig kun je sinds MySQL 4.0.0 SQL_CALC_FOUND_ROWS gebruiken optie in uw zoekopdracht die MySQL zal vertellen om het totale aantal rijen te tellen zonder rekening te houden met LIMIT clausule. U moet nog steeds een tweede query uitvoeren om het aantal rijen op te halen, maar het is een eenvoudige query en niet zo complex als uw query waarmee de gegevens zijn opgehaald. Het gebruik is vrij eenvoudig. In je hoofdquery moet je SQL_CALC_FOUND_ROWS . toevoegen optie net na SELECT en in de tweede zoekopdracht moet je FOUND_ROWS() . gebruiken functie om het totale aantal rijen te krijgen. Query's zien er als volgt uit:

SELECT SQL_CALC_FOUND_ROWS name, email FROM users WHERE name LIKE 'a%' LIMIT 10;

SELECT FOUND_ROWS();

De enige beperking is dat u de tweede query onmiddellijk na de eerste moet aanroepen omdat SQL_CALC_FOUND_ROWS slaat nergens het aantal rijen op. Hoewel deze oplossing ook twee query's vereist, is het veel sneller, omdat u de hoofdquery maar één keer uitvoert. U kunt meer lezen over SQL_CALC_FOUND_ROWS en FOUND_ROWS() in MySQL-documenten.

BEWERKEN: Houd er rekening mee dat in de meeste gevallen het tweemaal uitvoeren van de query eigenlijk sneller is dan SQL_CALC_FOUND_ROWS . zie hier

BEWERK 2019:

De SQL_CALC_FOUND_ROWS-querymodifier en de bijbehorende FOUND_ROWS()-functie zijn verouderd vanaf MySQL 8.0.17 en worden verwijderd in een toekomstige MySQL-versie.

https://dev.mysql.com /doc/refman/8.0/en/information-functions.html#function_found-rows

Het wordt aanbevolen om COUNT . te gebruiken in plaats daarvan

SELECT * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT COUNT(*) WHERE id > 100;



  1. Is er een combinatie van LIKE en IN in SQL?

  2. Hoe kan ik een SQL Stored Procedure aanroepen met EntityFramework 7 en Asp.Net 5.

  3. Vind de echte kolomnaam van een alias die in een weergave wordt gebruikt?

  4. Een getal naar boven afronden naar het dichtstbijzijnde gehele getal in SQL