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

SELECT COUNT(*) je pomalý, dokonce i s klauzulí where

InnoDB používá seskupené primární klíče, takže primární klíč je uložen spolu s řádkem na datových stránkách, nikoli na samostatných stránkách indexu. Chcete-li provést skenování rozsahu, musíte stále procházet všechny potenciálně široké řádky na datových stránkách; všimněte si, že tato tabulka obsahuje sloupec TEXT.

Dvě věci bych zkusil:

  1. spusťte optimize table . To zajistí, že datové stránky budou fyzicky uloženy v setříděném pořadí. To by mohlo případně urychlit skenování rozsahu na seskupeném primárním klíči.
  2. vytvořte další neprimární index pouze ve sloupci change_event_id. Tím se uloží kopie tohoto sloupce na indexové stránky, jejichž skenování je mnohem rychlejší. Po jeho vytvoření zkontrolujte plán vysvětlení a ujistěte se, že používá nový index.

(pravděpodobně také budete chtít, aby byl sloupec change_event_id velký nepodepsaný pokud se zvyšuje od nuly)



  1. výpočet a zobrazení data jako „před sekundami“, „před minutami“, „před hodinami“ atd.

  2. ST_DWithin bere parametr jako stupeň, ne metry, proč?

  3. Otázka PHP:Jak opravit tyto příkazy if/elseif

  4. Funkce PostgreSQL vracející více sad výsledků