Индексируйте таблицу MySQL (поиск по сетке) - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть таблица mysql my_table, в которой есть следующий столбец:

start_cell, end_cell, field_1, field_2, field_3 ..., field_n

В большинстве случаев я хочу сделать что-то вроде:

select * from my_table where start_cell = 'cell_1234' and end_cell = 'cell_5678'

start_cell и end_cell имеют значения от cell_1 до cell_9000

Я сделал следующий индекс, чтобы ускорить поиск:

alter table my_table add index(start_cell)

До сих пор это прекрасно работало.Тем не менее, мне интересно, есть ли лучший индексный подход для этой проблемы?Спасибо!

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

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

ALTER TABLE my_table ADD INDEX (start_cell, end_cell);

Этот индекс также будет эффективен для запросов, которые просто проверяют start_cell, посколькуСтолбец index также является индексом для любого префикса индекса (это естественное следствие индексов B-дерева).

Если вам также нужно оптимизировать запросы, которые проверяют end_cell без start_cell, вы можете добавить второй индекс:

ALTER TABLE my_table ADD INDEX (end_cell);
0 голосов
/ 21 сентября 2018

Вопрос немного шире, вы должны принять во внимание, что нужно учитывать типы полей, которыми являются start_cell и end_cell. Любое другое использование, кроме простого select * с использованием объединения или группировки по индексам, иногда может быть более полезным, если объединение болеечем одно поле, хотя, похоже, это не так

В общем, лучший способ проверить правильность индексации - использовать объяснение select, то есть:

EXPLAIN select * from my_table where start_cell = 'cell_1234' and end_cell = 'cell_5678'

Это покажет вамслабые места вашего запроса, и сможет указать вам лучший подход MySQL объяснение выберите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...