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.
2 odpowiedzi
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
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);
Podobne pytania
Nowe pytania
mysql
MySQL to darmowy system zarządzania relacyjnymi bazami danych (RDBMS) o otwartym kodzie źródłowym, który wykorzystuje język SQL (Structured Query Language). NIE UŻYWAJ tego znacznika dla innych baz danych, takich jak SQL Server, SQLite itp. Są to różne bazy danych, które używają własnych dialektów SQL do zarządzania danymi.