Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SELECT COUNT(*) działa wolno, nawet z klauzulą ​​where

InnoDB używa klastrowych kluczy podstawowych, więc klucz podstawowy jest przechowywany wraz z wierszem na stronach danych, a nie na oddzielnych stronach indeksu. Aby wykonać skanowanie zakresu, nadal musisz przejrzeć wszystkie potencjalnie szerokie wiersze na stronach danych; zauważ, że ta tabela zawiera kolumnę TEKST.

Spróbowałbym dwóch rzeczy:

  1. uruchom optimize table . Zapewni to fizyczne przechowywanie stron danych w posortowanej kolejności. Może to prawdopodobnie przyspieszyć skanowanie zakresu klastrowanego klucza podstawowego.
  2. utwórz dodatkowy indeks inny niż podstawowy tylko w kolumnie change_event_id. Spowoduje to zapisanie kopii tej kolumny na stronach indeksu, które będą znacznie szybsze do skanowania. Po utworzeniu sprawdź plan wyjaśniania, aby upewnić się, że używa nowego indeksu.

(prawdopodobnie chcesz też, aby kolumna change_event_id bigint była niepodpisana jeśli rośnie od zera)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ElasticSearch rzeki JDBC MySQL nie usuwa rekordów

  2. Jak NOT RLIKE działa w MySQL?

  3. Kolumny automatycznego przyrostu MySQL w transakcjach TRANSACTION, COMMIT i ROLLBACK

  4. Najlepsza praktyka obsługi błędów przy użyciu PDO

  5. Różnica między SELECT INTO i INSERT INTO w MySQL