[MySQL] Query met aantal records en LIMIT; beste performance

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
Voor bepaalde overzichten haal ik een bepaald aantal records uit een MySQL-tabel. Ik gebruik hiervoor de 'LIMIT n, m'-constructie waarbij de n staat voor de beginpositie en m voor het aantal te selecteren records. Naast de records die ik selecteer wil ik ook het totaal aantal records dat aan de WHERE-conditie voldoet op het scherm tonen.

Wat is hiervoor qua performance-overwegingen de beste oplossing van deze twee (of is er een betere?):

Mogelijkheid 1: In twee stappen selecten uit de database:
MySQL:
1
2
3
4
5
6
7
8
9
'Eerst het aantal records met behulp van COUNT(primary_key) 
'en deze opslaan in een variabele

SELECT
    COUNT(ArtikelID)
FROM
    artikelen
WHERE
    BedrijfID = 1;


MySQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
'Vervolgens de records die nodig zijn: 
'vanaf het eerste record (0) 10 records selecten (10)

SELECT
    ArtikelID, 
    Omschrijving, 
    Prijs
FROM
    artikelen
WHERE
    BedrijfID = 1
LIMIT
    0, 10;


Mogelijkheid 2: In één keer selecten met een subquery:

MySQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
'records selecteren + subquery met COUNT(primary_key)

SELECT
    (
    SELECT 
        COUNT(ArtikelID)
    FROM
        artikelen
    WHERE
        BedrijfID = 1
    ), 
    ArtikelID, 
    Omschrijving, 
    Prijs
FROM
    artikelen
WHERE
    BedrijfID = 1
LIMIT
    0, 10;

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Je kunt het ook zo doen:
code:
1
2
3
4
5
6
7
8
9
10
SELECT SQL_CALC_FOUND_ROWS
    ArtikelID, 
    Omschrijving, 
    Prijs
FROM
    artikelen
WHERE
    BedrijfID = 1
LIMIT
    0, 10;

en dan een tweede query:
code:
1
SELECT FOUND_ROWS();

Dit is alleen wel pas beschikbaar in MySQL 4.0.0.

http://dev.mysql.com/doc/mysql/en/information-functions.html

Noushka's Magnificent Dream | Unity