MySQL - индекс по выражению.
-
3kLiN
MySQL - индекс по выражению.
возможно ли в mysql создать индекс по выражению?
например, имеется много запросов, использующих результат LOCATE('some str',field1). возможно ли создать индекс по этому выражению? или нужно извращаться с доп. полем + триггером?
например, имеется много запросов, использующих результат LOCATE('some str',field1). возможно ли создать индекс по этому выражению? или нужно извращаться с доп. полем + триггером?
-
3kLiN
Re: MySQL - индекс по выражению.
Цитата 3kLiN:
индекс по выражению
А что это такое? Можно сделать дополнительное поле, где резултат хранить и ставить индекс на него
индекс по выражению
MySQL - индекс по выражению.
А что это такое? Можно сделать дополнительное поле, где резултат хранить и ставить индекс на него
-
3kLiN
Re: MySQL - индекс по выражению.
vadimiron, с доп. полем понятно. только необходимый результат в это дополнительное поле придётся класть триггером (ну либо самим приложением, что ещё хуже, имхо).
но вот если бы можно было создать индекс на locate('somestr',field1), чтобы он подключался, когда это выражение в where используется... было бы просто, быстро и комфортно.
но вот если бы можно было создать индекс на locate('somestr',field1), чтобы он подключался, когда это выражение в where используется... было бы просто, быстро и комфортно.
-
vadimiron
Re: MySQL - индекс по выражению.
Цитата 3kLiN:
когда это выражение в where используется
Вы подумайте, сколько ресурсов будет забирать всё это!
Сначало генерация всех значений, потом сортировка всей таблицы по этому выражению и только потом будет произведён запрос.
Это совершенно не рационально. Так что используйте лучше ещё одно поле.
когда это выражение в where используется
MySQL - индекс по выражению.
Вы подумайте, сколько ресурсов будет забирать всё это!
Сначало генерация всех значений, потом сортировка всей таблицы по этому выражению и только потом будет произведён запрос.
Это совершенно не рационально. Так что используйте лучше ещё одно поле.
-
vadimiron
Re: MySQL - индекс по выражению.
vadimiron, Вы, видимо, меня всё-таки не так поняли. я имел ввиду создание индекса по какому-либо вычисляемому выражению аналогично созданию индекса по полю с помощью alter table add index ...
а затем использование субд этого индекса в запросах, где в where участвует указанное при создании индекса вычисляемое выражение, аналогично тому, как используются обычные индекса при наличии в условии "их" поля.
и чем это нерациональнее обычного индекса?
а затем использование субд этого индекса в запросах, где в where участвует указанное при создании индекса вычисляемое выражение, аналогично тому, как используются обычные индекса при наличии в условии "их" поля.
и чем это нерациональнее обычного индекса?
-
3kLiN
Re: MySQL - индекс по выражению.
Цитата 3kLiN:
создание индекса по какому-либо вычисляемому выражению аналогично созданию индекса по полю
вы путаете наверно кеш запросов и индекс... запросы кешируются в зависимости от параметров кеширования...
создание индекса по какому-либо вычисляемому выражению аналогично созданию индекса по полю
MySQL - индекс по выражению.
вы путаете наверно кеш запросов и индекс... запросы кешируются в зависимости от параметров кеширования...
-
Sham
Re: MySQL - индекс по выражению.
я ничего не путаю 
у меня есть некоторые кол-во разных запросов, которые используют в where, среди прочих, одно и то же условие. например, locate('str1',field1). причём здесь кеш запросов - непонятно. так вот, в моём случае логично было бы для ускорения выполнения этих выборок при большом размере базы создать некоторую структуру, которая ускоряла бы отбор по where locate('str1',field1). такие структуры в бд называются индексами. только обычный индекс создаётся по всему полю, например field1, и участвует в запросах, имеющих условие на это самое поле. мне же было интересно - возможно ли создание нечто подобного, но по выражению. что-то вроде alter table ... add index locate('str1',field1).
ух. понятней я уже не могу объяснить, звиняйте.

у меня есть некоторые кол-во разных запросов, которые используют в where, среди прочих, одно и то же условие. например, locate('str1',field1). причём здесь кеш запросов - непонятно. так вот, в моём случае логично было бы для ускорения выполнения этих выборок при большом размере базы создать некоторую структуру, которая ускоряла бы отбор по where locate('str1',field1). такие структуры в бд называются индексами. только обычный индекс создаётся по всему полю, например field1, и участвует в запросах, имеющих условие на это самое поле. мне же было интересно - возможно ли создание нечто подобного, но по выражению. что-то вроде alter table ... add index locate('str1',field1).
ух. понятней я уже не могу объяснить, звиняйте.
-
3kLiN
Re: MySQL - индекс по выражению.
3kLiN, imho вопрос правильно нужно ставить так: может ли функция LOCATE использовать индекс в принципе... afaik нет, поскольку ей по-любому нужно читать текущее значение поля...
Цитата 3kLiN:
возможно ли создание нечто подобного, но по выражению
а какую информацию вы предполагаете хранить в таком индексе? Я нпр не пойму логики...
Цитата 3kLiN:
возможно ли создание нечто подобного, но по выражению
MySQL - индекс по выражению.
а какую информацию вы предполагаете хранить в таком индексе? Я нпр не пойму логики...
-
Sham
Re: MySQL - индекс по выражению.
то, что locate не может использовать полный индекс по полю - это понятно, иначе бы и такой вопрос у меня не возник.
а хранить я предлагаю в таком индексе такое же b-tree, как и в остальных. только строить это дерево не на множестве значений поля, а на множестве результатов некоторого выражения (в моём случае locate()) от данного поля.
а хранить я предлагаю в таком индексе такое же b-tree, как и в остальных. только строить это дерево не на множестве значений поля, а на множестве результатов некоторого выражения (в моём случае locate()) от данного поля.
-
3kLiN
Re: MySQL - индекс по выражению.
Цитата 3kLiN:
а на множестве результатов некоторого выражения
ну перед этим надо же результаты как-то обозначить, т.е. куда-то поместить? Ведь предполагается же какая-то связка между результатами и индексом... как Вы себе это представляете?
мы неизбежно приходим к совету г-на vadimiron
Цитата vadimiron:
сделать дополнительное поле, где резултат хранить и ставить индекс на него
а на множестве результатов некоторого выражения
MySQL - индекс по выражению.
ну перед этим надо же результаты как-то обозначить, т.е. куда-то поместить? Ведь предполагается же какая-то связка между результатами и индексом... как Вы себе это представляете?
мы неизбежно приходим к совету г-на vadimiron
Цитата vadimiron:
сделать дополнительное поле, где резултат хранить и ставить индекс на него
MySQL - индекс по выражению.