Быстрая индексация чата для таблицы SQL - PullRequest
1 голос
/ 04 августа 2011

Я создаю таблицу MySQL, которая будет содержать все данные для многих сеансов чата один на один.

Вставки в индексированную таблицу все еще медленны, когда вставки всегда последовательны?

В системе чата я ожидаю частых вставок, а также частых поисков.

Каждый сеанс чата будет отслеживать свой собственный идентификатор сеанса и последний идентификатор сообщения. Таким образом, чтобы получить новые сообщения, я мог выполнить запрос как это:

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

Есть ли способ иметь многомерную индексацию? Похоже, что самый быстрый способ индексирования будет в первую очередь по sessionID, а затем по postID.

Ответы [ 2 ]

2 голосов
/ 06 августа 2011

Вы можете использовать многостолбцовый индекс для этого запроса, как это было предложено другими.

То есть, однако, не многомерный индекс, это просто размещение двух столбцов в одном измерении. Подумайте о печатной телефонной книге, упорядоченной по фамилии, имени. Два столбца, но только одно измерение.

Важным аспектом в вашем конкретном запросе является то, что у вас есть one условие диапазона. Для лучшей производительности важно, чтобы столбцы с условиями равенства были первыми, а условие диапазона последними в индексе, как это предлагалось другими комментаторами. Вам не нужно ничего многомерного для этого.

Если у вас более одного условия диапазона, вам действительно нужно (нужно) многомерный индекс.

Подробнее об этом: http://use -the-index-luke.com / SQL / где придаточного / поиск-для-диапазонов / больше-меньше-между-Tuning-SQL-доступа фильтр-предикаты

0 голосов
/ 06 августа 2011

Вы можете создать индекс по двум столбцам с помощью чего-то подобного.

    ALTER TABLE chat ADD INDEX chat_sessionID_postID_idx (sessionID ASC, postID ASC);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...