Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - индекс по выражению.

Ответить
Настройки темы
MySQL - индекс по выражению.

Пользователь


Сообщения: 101
Благодарности: 1

Профиль | Отправить PM | Цитировать


возможно ли в mysql создать индекс по выражению?

например, имеется много запросов, использующих результат LOCATE('some str',field1). возможно ли создать индекс по этому выражению? или нужно извращаться с доп. полем + триггером?

-------
Suum cuique


Отправлено: 14:40, 19-12-2007

 

Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Цитата 3kLiN:
индекс по выражению »
А что это такое? Можно сделать дополнительное поле, где резултат хранить и ставить индекс на него

-------
Fortes fortuna adiuvat


Отправлено: 00:15, 20-12-2007 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Пользователь


Сообщения: 101
Благодарности: 1

Профиль | Отправить PM | Цитировать


vadimiron, с доп. полем понятно. только необходимый результат в это дополнительное поле придётся класть триггером (ну либо самим приложением, что ещё хуже, имхо).
но вот если бы можно было создать индекс на locate('somestr',field1), чтобы он подключался, когда это выражение в where используется... было бы просто, быстро и комфортно.

-------
Suum cuique


Отправлено: 16:11, 20-12-2007 | #3


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


Цитата 3kLiN:
когда это выражение в where используется »
Вы подумайте, сколько ресурсов будет забирать всё это!
Сначало генерация всех значений, потом сортировка всей таблицы по этому выражению и только потом будет произведён запрос.
Это совершенно не рационально. Так что используйте лучше ещё одно поле.

-------
Fortes fortuna adiuvat


Отправлено: 23:20, 20-12-2007 | #4


Пользователь


Сообщения: 101
Благодарности: 1

Профиль | Отправить PM | Цитировать


vadimiron, Вы, видимо, меня всё-таки не так поняли. я имел ввиду создание индекса по какому-либо вычисляемому выражению аналогично созданию индекса по полю с помощью alter table add index ...
а затем использование субд этого индекса в запросах, где в where участвует указанное при создании индекса вычисляемое выражение, аналогично тому, как используются обычные индекса при наличии в условии "их" поля.
и чем это нерациональнее обычного индекса?

-------
Suum cuique


Отправлено: 01:24, 21-12-2007 | #5


Deadooshka


Сообщения: 2511
Благодарности: 689

Профиль | Отправить PM | Цитировать


Цитата 3kLiN:
создание индекса по какому-либо вычисляемому выражению аналогично созданию индекса по полю »
вы путаете наверно кеш запросов и индекс... запросы кешируются в зависимости от параметров кеширования...

Отправлено: 04:55, 21-12-2007 | #6


Пользователь


Сообщения: 101
Благодарности: 1

Профиль | Отправить PM | Цитировать


я ничего не путаю
у меня есть некоторые кол-во разных запросов, которые используют в where, среди прочих, одно и то же условие. например, locate('str1',field1). причём здесь кеш запросов - непонятно. так вот, в моём случае логично было бы для ускорения выполнения этих выборок при большом размере базы создать некоторую структуру, которая ускоряла бы отбор по where locate('str1',field1). такие структуры в бд называются индексами. только обычный индекс создаётся по всему полю, например field1, и участвует в запросах, имеющих условие на это самое поле. мне же было интересно - возможно ли создание нечто подобного, но по выражению. что-то вроде alter table ... add index locate('str1',field1).

ух. понятней я уже не могу объяснить, звиняйте.

-------
Suum cuique


Отправлено: 00:06, 22-12-2007 | #7


Deadooshka


Сообщения: 2511
Благодарности: 689

Профиль | Отправить PM | Цитировать


3kLiN, imho вопрос правильно нужно ставить так: может ли функция LOCATE использовать индекс в принципе... afaik нет, поскольку ей по-любому нужно читать текущее значение поля...
Цитата 3kLiN:
возможно ли создание нечто подобного, но по выражению »
а какую информацию вы предполагаете хранить в таком индексе? Я нпр не пойму логики...

Отправлено: 03:40, 22-12-2007 | #8


Пользователь


Сообщения: 101
Благодарности: 1

Профиль | Отправить PM | Цитировать


то, что locate не может использовать полный индекс по полю - это понятно, иначе бы и такой вопрос у меня не возник.

а хранить я предлагаю в таком индексе такое же b-tree, как и в остальных. только строить это дерево не на множестве значений поля, а на множестве результатов некоторого выражения (в моём случае locate()) от данного поля.

-------
Suum cuique


Отправлено: 20:41, 22-12-2007 | #9


Deadooshka


Сообщения: 2511
Благодарности: 689

Профиль | Отправить PM | Цитировать


Цитата 3kLiN:
а на множестве результатов некоторого выражения »
ну перед этим надо же результаты как-то обозначить, т.е. куда-то поместить? Ведь предполагается же какая-то связка между результатами и индексом... как Вы себе это представляете?

мы неизбежно приходим к совету г-на vadimiron
Цитата vadimiron:
сделать дополнительное поле, где резултат хранить и ставить индекс на него »
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:44, 23-12-2007 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - индекс по выражению.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Не обновляется индекс производительности DenisPro Microsoft Windows Vista 23 12-11-2009 18:18
Разное - Оценка (индекс) производительности компьютера Hatab117 Microsoft Windows 7 12 28-07-2009 00:29
Разное - [решено] Индекс производительности и ReadyBoost Dabaduch Microsoft Windows Vista 4 05-01-2008 04:19
Службы - не обнавляется индекс производительности Ya Виктор Microsoft Windows Vista 4 13-07-2007 12:48
Не увеличивается Индекс цетирования dov Вебмастеру 5 24-07-2003 18:19




 
Переход