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

MySQL:długi stół a szeroki stół

Przede wszystkim są to dwa różne modele danych odpowiednie do różnych celów.

Biorąc to pod uwagę, spodziewam się, że drugi model będzie szybszy do agregacji, po prostu dlatego, że dane są upakowane bardziej kompaktowo, co wymaga mniejszej liczby operacji we/wy:

  • GRUPA WG w pierwszym modelu może być spełniona przez pełną skanuj indeks {size, price} . Alternatywa dla indeksu jest zbyt wolna, gdy dane są zbyt duże, aby zmieścić się w pamięci RAM.
  • Zapytanie w drugim modelu może zostać spełnione przez pełne skanowanie tabeli. Indeks nie jest potrzebny.

Ponieważ pierwsze podejście wymaga tabeli + indeks, a drugie tylko tabeli, w drugim przypadku wykorzystanie pamięci podręcznej jest lepsze. Nawet jeśli zignorujemy buforowanie i porównamy indeks (bez tabeli) w pierwszym modelu z tabelą w drugim modelu, podejrzewam, że indeks będzie większy niż tabela, po prostu dlatego, że fizycznie rejestruje size i ma niewykorzystane "dziury" typowe dla B-Trees (chociaż to samo dotyczy tabeli, jeśli jest klastrowy ).

I wreszcie, drugi model nie ma narzutu na utrzymanie indeksu, który mógłby wpłynąć na wydajność INSERT/UPDATE/DELETE.

Poza tym możesz rozważyć buforowanie SUM i COUNT w osobnej tabeli zawierającej tylko jeden wiersz. Aktualizuj zarówno SUMA, jak i LICZBA za pomocą wyzwalaczy za każdym razem, gdy wiersz jest wstawiany, aktualizowany lub usuwany w tabeli głównej. Następnie możesz łatwo uzyskać bieżące AVG, dzieląc po prostu SUM i COUNT.

Ale naprawdę powinieneś zmierzyć dla pewności na reprezentatywnych ilościach danych.

Ponieważ w zapytaniu nie ma klauzuli WHERE, wszystkie wiersze zostaną przeskanowane. Indeksy są przydatne tylko do uzyskania stosunkowo małego podzbioru wierszy tabeli (a czasami do skanowania tylko do indeksu ). Ogólna zasada mówi, że jeśli potrzeba więcej niż 10% wierszy w tabeli, indeksy nie pomogą, a DBMS często wybiera pełne skanowanie tabeli, nawet jeśli indeksy są dostępne.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Klauzula WHERE w instrukcji INSERT przy użyciu mysql/php

  2. Używanie Jquery Ajax do pobierania danych z Mysql

  3. używając (-) myślnika w nazwie tabeli mysql

  4. Funkcja JavaScript publikuje i wywołuje skrypt php

  5. Dlaczego MySQL dodaje komentarz do tabel InnoDB?