|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MySQL - индекс по выражению. |
|
|
MySQL - индекс по выражению.
|
Пользователь Сообщения: 101 |
Профиль | Отправить PM | Цитировать возможно ли в mysql создать индекс по выражению?
например, имеется много запросов, использующих результат LOCATE('some str',field1). возможно ли создать индекс по этому выражению? или нужно извращаться с доп. полем + триггером? |
|
------- Отправлено: 14:40, 19-12-2007 |
Ветеран Сообщения: 1864
|
Профиль | Отправить PM | Цитировать Цитата 3kLiN:
|
|
------- Отправлено: 00:15, 20-12-2007 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 101
|
Профиль | Отправить PM | Цитировать vadimiron, с доп. полем понятно. только необходимый результат в это дополнительное поле придётся класть триггером (ну либо самим приложением, что ещё хуже, имхо).
но вот если бы можно было создать индекс на locate('somestr',field1), чтобы он подключался, когда это выражение в where используется... было бы просто, быстро и комфортно. |
------- Отправлено: 16:11, 20-12-2007 | #3 |
Ветеран Сообщения: 1864
|
Профиль | Отправить PM | Цитировать Цитата 3kLiN:
Сначало генерация всех значений, потом сортировка всей таблицы по этому выражению и только потом будет произведён запрос. Это совершенно не рационально. Так что используйте лучше ещё одно поле. |
|
------- Отправлено: 23:20, 20-12-2007 | #4 |
Пользователь Сообщения: 101
|
Профиль | Отправить PM | Цитировать vadimiron, Вы, видимо, меня всё-таки не так поняли. я имел ввиду создание индекса по какому-либо вычисляемому выражению аналогично созданию индекса по полю с помощью alter table add index ...
а затем использование субд этого индекса в запросах, где в where участвует указанное при создании индекса вычисляемое выражение, аналогично тому, как используются обычные индекса при наличии в условии "их" поля. и чем это нерациональнее обычного индекса? |
|
------- Отправлено: 01:24, 21-12-2007 | #5 |
Deadooshka Сообщения: 2511
|
Профиль | Отправить PM | Цитировать Цитата 3kLiN:
|
|
Отправлено: 04:55, 21-12-2007 | #6 |
Пользователь Сообщения: 101
|
Профиль | Отправить PM | Цитировать я ничего не путаю
у меня есть некоторые кол-во разных запросов, которые используют в where, среди прочих, одно и то же условие. например, locate('str1',field1). причём здесь кеш запросов - непонятно. так вот, в моём случае логично было бы для ускорения выполнения этих выборок при большом размере базы создать некоторую структуру, которая ускоряла бы отбор по where locate('str1',field1). такие структуры в бд называются индексами. только обычный индекс создаётся по всему полю, например field1, и участвует в запросах, имеющих условие на это самое поле. мне же было интересно - возможно ли создание нечто подобного, но по выражению. что-то вроде alter table ... add index locate('str1',field1). ух. понятней я уже не могу объяснить, звиняйте. |
------- Отправлено: 00:06, 22-12-2007 | #7 |
Deadooshka Сообщения: 2511
|
Профиль | Отправить PM | Цитировать 3kLiN, imho вопрос правильно нужно ставить так: может ли функция LOCATE использовать индекс в принципе... afaik нет, поскольку ей по-любому нужно читать текущее значение поля...
Цитата 3kLiN:
|
|
Отправлено: 03:40, 22-12-2007 | #8 |
Пользователь Сообщения: 101
|
Профиль | Отправить PM | Цитировать то, что locate не может использовать полный индекс по полю - это понятно, иначе бы и такой вопрос у меня не возник.
а хранить я предлагаю в таком индексе такое же b-tree, как и в остальных. только строить это дерево не на множестве значений поля, а на множестве результатов некоторого выражения (в моём случае locate()) от данного поля. |
------- Отправлено: 20:41, 22-12-2007 | #9 |
Deadooshka Сообщения: 2511
|
Профиль | Отправить PM | Цитировать Цитата 3kLiN:
мы неизбежно приходим к совету г-на vadimiron Цитата vadimiron:
|
||
Отправлено: 00:44, 23-12-2007 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Не обновляется индекс производительности | 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 |
|