Tworzę tabelę MySQL, która będzie przechowywać wszystkie dane dla wielu sesji czatu jeden na jednego.

Czy wstawiania do tabeli indeksowanej są nadal powolne, gdy wstawienia są zawsze sekwencyjne?

Z systemem czatu oczekuję częstych wstawek, a także częstych wyszukiwań.

Każda sesja czatu będzie śledzić swój własny identyfikator sesji i najnowszy identyfikator posta. Aby uzyskać nowe posty, mógłbym uruchomić zapytanie w ten sposób:

SELECT * FROM chat WHERE sessionID = xxxx AND postID > xxx

Czy istnieje sposób na wielowymiarowe indeksowanie? Wygląda na to, że najszybszym sposobem na indeksowanie byłoby przede wszystkim sessionID, a następnie postID.

1
objectivesea 4 sierpień 2011, 12:03
Jest to konfiguracja OSX Apache MySQL PHP. Czy to miałeś na myśli?
 – 
objectivesea
5 sierpień 2011, 05:16
Możesz mieć indeks na sessionID, postID w MySQL. To najlepszy indeks dla powyższego zapytania. Aby szybko wstawić, użyj klucza podstawowego autoincremet (zazwyczaj ma to znaczenie w przypadku dużych tabel).
 – 
Maxim Krizhanovsky
5 sierpień 2011, 11:06

2 odpowiedzi

Najlepsza odpowiedź

Możesz użyć indeksu wielokolumnowego dla tego zapytania, zgodnie z sugestiami innych.

Nie jest to jednak nie indeks wielowymiarowy, to po prostu umieszczenie dwóch kolumn w tym samym wymiarze. Pomyśl o wydrukowanej książce telefonicznej uporządkowanej według nazwiska, imienia. Dwie kolumny, ale tylko jeden wymiar.

Ważnym aspektem konkretnego zapytania jest to, że masz warunek jeden zakres. Aby uzyskać najlepszą wydajność, ważne jest, aby kolumny z warunkami równości umieścić jako pierwsze, a warunek zakresu jako ostatni w indeksie, jak sugerują inni komentatorzy. Nie potrzebujesz do tego niczego wielowymiarowego.

Jeśli masz więcej niż jeden zakres warunków, naprawdę potrzebujesz (chcesz) indeksu wielowymiarowego.

Więcej na ten temat: http://use-the-index-luke.com/sql/where-clause/searching-for-ranges/greater-less-between-tuning-sql-access-filter-predicates

2
Markus Winand 6 sierpień 2011, 11:26

Możesz utworzyć indeks w dwóch kolumnach za pomocą czegoś takiego.

    ALTER TABLE chat ADD INDEX chat_sessionID_postID_idx (sessionID ASC, postID ASC);
0
Appak 6 sierpień 2011, 03:49