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

Przyspieszenie liczenia wierszy w MySQL

Więc pytanie brzmi

czy są jakieś techniki przyspieszania tego rodzaju zapytań?

Cóż, nie za bardzo. Mechanizm przechowywania oparty na kolumnach byłby prawdopodobnie szybszy z tymi zapytaniami SELECT COUNT(*), ale byłby mniej wydajny w przypadku prawie każdego innego zapytania.

Najlepszym rozwiązaniem jest utrzymanie tabeli podsumowującej za pomocą wyzwalaczy. Nie wiąże się to z dużym obciążeniem, a część SELECT będzie natychmiastowa, bez względu na wielkość stołu. Oto kilka standardowych kodów:

DELIMITER //

CREATE TRIGGER ai_books AFTER INSERT ON books
FOR EACH ROW UPDATE books_cnt SET total = total + 1 WHERE status = NEW.status
//
CREATE TRIGGER ad_books AFTER DELETE ON books
FOR EACH ROW UPDATE books_cnt SET total = total - 1 WHERE status = OLD.status;
//
CREATE TRIGGER au_books AFTER UPDATE ON books
FOR EACH ROW
BEGIN
    IF (OLD.status <> NEW.status)
    THEN
        UPDATE books_cnt SET total = total + IF(status = NEW.status, 1, -1) WHERE status IN (OLD.status, NEW.status);
    END IF;
END
//


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL konwertuje dane wyjściowe w formacie timediff na dzień, godzinę, minutę i drugi format

  2. Skumulowana suma w zbiorze wierszy w mysql

  3. Dlaczego warunek IN miałby być wolniejszy niż =w sql?

  4. Jak sprawdzić, czy wiersz istnieje w MySQL? (tzn. sprawdź, czy wiadomość e-mail istnieje w MySQL)

  5. Jak oceniać partycje w MySQL?