sql >> Databáze >  >> RDS >> Mysql

optimalizovat dotaz na počet mysql

Pokud má mysql počítat 11 milionů řádků, opravdu neexistuje moc způsob, jak urychlit jednoduché počítání. Alespoň aby ​​to nedosáhlo rychlosti pod 1 sekundu. Měli byste se zamyslet nad tím, jak počítáte. Pár nápadů:

  1. Přidejte do tabulky pole automatického přírůstku. Vypadá to, že byste z tabulky neodstranili, takže můžete použít jednoduchou matematiku k nalezení počtu záznamů. Vyberte minimální číslo automatického přírůstku pro počáteční dřívější datum a maximum pro pozdější datum a odečtením jednoho od druhého získáte počet záznamů. Například:

    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. Vytvořte další tabulku shrnující počet záznamů pro každý den. Potom se můžete dotázat této tabulky na celkové záznamy. Pro každý rok by bylo pouze 365 záznamů. Pokud se potřebujete snížit na jemnější časy, dotazujte se v souhrnné tabulce na celé dny a v aktuální tabulce pouze na počet záznamů pro počáteční a koncový den. Poté je všechny přidejte dohromady.

Pokud se data nemění, což se nezdá, pak se souhrnné tabulky budou snadno udržovat a aktualizovat. Výrazně to urychlí.



  1. Vybrat / vložit verzi Upsert:existuje návrhový vzor pro vysokou souběžnost?

  2. SQL Server Process Queue Race Condition

  3. SQL Server Vysvětlení NĚKTERÉHO operátora

  4. PostgreSQL další hodnota sekvencí?