Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dlaczego wykonanie tej instrukcji Sql (z 2 połączeniami tabel) zajmuje 5 minut?

To nie w porządku.

Mam dwie możliwości:

1) Statystyki są nieaktualne w tabelach. Odbuduj indeksy i zaktualizuj statystyki.

2) Jak powiedziałeś, rekordy tabeli Geografia są duże i obejmują wiele stron (nie ten jeden rekord obejmujący wiele stron, ponieważ nie może, ale rekord jest zbliżony do znaku 8K). W tym przypadku, dość zabawne, może pomóc utworzenie innego indeksu nieklastrowego na indeksie klastrowym.

AKTUALIZUJ

Cieszę się, że się udało. Teraz kilka wyjaśnień.

Po pierwsze, jeśli coś jest nie tak, a plan wykonania wygląda dziwnie, zawsze sprawdzaj statystyki i odbuduj indeksy.

Tworzenie indeksu nieklastrowego dla indeksu klastrowego zwykle nie powinno przynieść żadnych korzyści, ale gdy tabela zawiera wiele rekordów, a rekord jest bliski limitu 8K, jest to pomocne. Jak wiecie, SQL, gdy idzie na dysk, aby załadować rekord, ładuje stronę o rozmiarze 8K. W podobny sposób, przechodząc do indeksów, załaduje stronę 8K. Teraz, gdy indeks jest 4-bajtową liczbą całkowitą, oznacza to ładowanie identyfikatora 2000 rekordów, podczas gdy będzie ładował kilka rekordów, jeśli używa indeksu klastrowego (pamiętaj, że potrzebujemy tylko identyfikatora dla bitu JOIN). Teraz, gdy jest to wyszukiwanie binarne, nie oczekuję, że pomoże tylko trochę. Więc może coś innego jest nie tak, ale trudno odgadnąć, nie widząc systemu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie SQL, które pobiera wszystkie kody pocztowe (adresy) w promieniu 20 mil od danego kodu pocztowego

  2. połącz dwie kolumny bazy danych w jedną kolumnę wyników;

  3. Używanie podzapytań w SQL do znalezienia max(count())

  4. Przełączanie partycji w SQL Server (T-SQL)

  5. Rozpocznij pierwszy dzień tygodnia jako niedziela w SQL