Индексирование полного столбца или подстроки - PullRequest
0 голосов
/ 22 мая 2018

У меня есть большая таблица mariadb с миллионами строк.Основой для большей части анализа данных будет столбец из 10 цифр, как показано ниже.

4047535609
6099526199
6014157747
3045308020

Для многих запросов мне нужны только первые 6 цифр.План состоит в том, чтобы проиндексировать этот столбец, но мне любопытно, будет ли иметь большое / какое-либо значение создание индекса подстроки, такой как left (sku, 6), или просто индексирование всего столбца.Я должен отметить, что большинство запросов будет включать группировку первых первых 6 цифр.

Пространство HD на самом деле не проблема, но потенциально с 15-20 миллионами строк мне любопытно количество элементовindex.

Редактировать: я изменил имя столбца на sku вместо id.Столбец id является первичным ключом.Столбец sku не является уникальным.

id int(11) Primary Key
sku varchar(12)
rate decimal(5,2)
region varchar(24)
quantity int(4)
orderdate datetime

Я ожидаю, что большинство запросов будет включать группировку общих sku по отношению к другим категориям, таким как # sku с частотой n или областью x.

1 Ответ

0 голосов
/ 27 мая 2018

План A: индекс для виртуального столбца id6, определенный как LEFT(id, 6).

План B: "индексирование префикса": INDEX(id(6)) - это экономно на дисковом пространстве, но редко полезно.

План C: просто используйте INDEX(id) (или PRIMARY KEY(id) ??)

В вопросе отсутствует много деталей:

  • Являются ли запросы "точечные запросы "?То есть, вы хотите найти первый пример элемента через "404753"? If so, Plan A, with WHERE id6 = '404753', вероятно, лучший.
  • Нужно ли, чтобы запросы выполняли какую-то форму "диапазона", например WHERE id between "404700" AND "404987"?План Б ужасен.
  • Является ли id PRIMARY KEY?Это подразумевает уникальность и существование PRIMARY KEY(id).План C является лучшим, но для оптимизации точечных запросов требуется WHERE id >= '404753' AND id <= '40475359999' (или что-то в этом роде)
  • и т. Д.(Если вы дадите нам более подробную информацию, я мог бы рассказать больше.)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...