sql >> Database >  >> RDS >> Mysql

optimaliseer mysql count-query

Als mysql 11 miljoen rijen moet tellen, is er niet echt een manier om een ​​eenvoudige telling te versnellen. In ieder geval niet om het tot een snelheid van minder dan 1 seconde te krijgen. Je moet heroverwegen hoe je je telling doet. Een paar ideeën:

  1. Voeg een veld voor automatische verhoging toe aan de tabel. Het lijkt erop dat u niet uit de tabel zou verwijderen, dus u kunt eenvoudige wiskunde gebruiken om het aantal records te vinden. Selecteer het min. automatische ophogingsnummer voor de aanvankelijke eerdere datum en het max. voor de laatste datum en trek de een van de ander af om het aantal records te krijgen. Bijvoorbeeld:

    SELECT min(incr_id) min_id FROM record_updates WHERE date_updated BETWEEN '2009-10-11 15:33:22' AND '2009-10-12 23:59:59';
    SELECT max(incr_id) max_id FROM record_updates WHERE date_updated > DATE_SUB(NOW(), INTERVAL 2 DAY);`
    
  2. Maak nog een tabel met een samenvatting van het aantal records voor elke dag. Vervolgens kunt u die tabel opvragen voor de totale records. Er zouden slechts 365 records voor elk jaar zijn. Als u nauwkeurigere tijden wilt hebben, kunt u de overzichtstabel voor volledige dagen opvragen en de huidige tabel alleen voor het aantal records voor de begin- en einddagen. Voeg ze dan allemaal samen.

Als de gegevens niet veranderen, wat niet lijkt te zijn, zijn overzichtstabellen eenvoudig te onderhouden en bij te werken. Ze zullen de zaken aanzienlijk versnellen.



  1. Hoe selecteer ik op basis van een reeks begintekens?

  2. Subquery gebruiken in een Check-instructie in Oracle

  3. Hoe het verschil in jaren van twee verschillende datums te krijgen?

  4. SQL-tabel met lijstitem versus SQL-tabel met een rij voor elk item