Индексируйте таблицу MySQL (поиск по сетке)

0

У меня есть таблица 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)

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

Теги:
indexing

2 ответа

1
Лучший ответ

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

ALTER TABLE my_table ADD INDEX (start_cell, end_cell);

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

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

ALTER TABLE my_table ADD INDEX (end_cell);
0

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню