Индекс на основе функций в числовом столбце - PullRequest
0 голосов
/ 25 марта 2011

У меня есть таблица, содержащая несколько числовых столбцов, и я должен хранить их в числовом виде, потому что большую часть времени я буду извлекать из этого пользу.Но мне нужно также сделать общий поиск по этим столбцам, используя частичные совпадения, поэтому в моем выражении where у меня будет что-то вроде

...where num_col1 like "1234%...

Мой вопрос:

Могу ли я сделать функцию на основеиндекс на num_col1 приведение столбца к CHAR?Я пытался, но кажется, что это невозможно.

Если нет, у вас, ребята, есть какие-то другие предложения о том, как я могу ускорить результаты моих запросов?

Я прочитал вокруг, что некоторые возможные решения могут быть либо создать представление моей исходной таблицы, и изменить тип столбца на varchar, и индексировать этот столбец, либо другое решение - добавить дополнительный столбец varchar в мою таблицу.и индексировать это.Я хотел бы избежать обоих этих решений, потому что у меня действительно большая таблица, содержащая уже огромное количество строк и огромное количество столбцов.

Спасибо всем заранее, Бест, Н.

Ответы [ 2 ]

2 голосов
/ 25 марта 2011

MySQL не имеет индексов на основе функций, виртуальных столбцов или индексированных представлений (afaik).

Цитирование примечания об индексах на основе функций в MySQL из моего учебника по индексированию SQL:

Решением для резервного копирования является создание в таблице реального столбца, который содержит результат выражения.Столбец должен поддерживаться триггером или прикладным уровнем - что угодно более подходящее.Новый столбец можно индексировать, как и любой другой, операторы SQL должны запрашивать новый столбец (без выражения).

Однако в вашем конкретном случае, вероятно, существует риск, что вы отфильтруете погде угодно, как выражение "% 1234%".В этом случае b-tree не поможет (объяснение в LIKE настройка / индексирование производительности ).Это потребует полнотекстовой индексации, которая работает только с MyISAM.

1 голос
/ 25 марта 2011

Я думаю, что ваш инстинкт использования представления правильный, чтобы не дублировать данные. Но каковы потребности, которые оптимизируются числами в одном случае и поиском строк в другом? В зависимости от них, возможно, имеет смысл взглянуть на систему нумерации, чтобы увидеть, можно ли искать в диапазоне чисел (x> = 12340 и x <12350), который будет намного быстрее сравнения строк. </p>

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