powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Индекс не на первые буквы, а на последние
14 сообщений из 14, страница 1 из 1
Индекс не на первые буквы, а на последние
    #39080623
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
create t (tit varchar(32))



Код: plaintext
1.
2.
3.
4.
Кто дурак? Саша
Кто дурак? Дима
Кто дурак? Артем
Кто дурак? Петя
Кто дурак? Костя

Мы знаем, что если на эти данные кинуть индекс alter t add index _tit (tit(8)), то он окажется полностью бесполезен потому что во всех первых 8 буквах у нас одинаковый контент.

Вопрос: существует ли возможность кинуть индекс на те же самые 8 букв, но не с начала, а с конца строки?

Сейчас у нас на like '%Саша' индексы не целяются, а на like 'Саша%' цепляются.
А если бы можно было сделать индекс с конца, то наверное у нас на like 'Саша%' индекс перестал бы цепляться, а на like '%Саша' начал бы цепляться.

Или в таких случаях проще на клиенте флапануть данные и хранить их флипанутыми и флипануто же искать?

Код: plaintext
1.
2.
3.
4.
ятсоК ?каруд отК
ятеП ?каруд отК
метрА ?каруд отК
амиД ?каруд отК
ашаС ?каруд отК

А искать так

Код: sql
1.
select tit from t where tit like 'амиД%'
...
Рейтинг: 0 / 0
Индекс не на первые буквы, а на последние
    #39080661
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix
Код: sql
1.
create t (tit varchar(32))



Код: plaintext
1.
2.
3.
4.
Кто дурак? Саша
Кто дурак? Дима
Кто дурак? Артем
Кто дурак? Петя
Кто дурак? Костя

Мы знаем, что если на эти данные кинуть индекс alter t add index _tit (tit(8)), то он окажется полностью бесполезен потому что во всех первых 8 буквах у нас одинаковый контент.



Нет, не будет он полностью бесполезен. Он будет бесполезен только если во всей таблице будет у всех строк поле tit начинаться
с этой одной и той же строки -- "Кто дурак?"

LumixВопрос: существует ли возможность кинуть индекс на те же самые 8 букв, но не с начала, а с конца строки?


В принципе -- да. В MySQL -- нет. Потому что такой индекс должен быть на выражение -- перевёрнутую строку (возможно, с префиксом). Но можно это достаточно легко обойти (с небольшими потерями) -- сделать ещё одно поле, где хранить данную
строку в перевёрнутом виде. А вот некоторые другие СУБД могут индексы делать по выражениям -- оракл, например.


LumixСейчас у нас на like '%Саша' индексы не целяются, а на like 'Саша%' цепляются.
А если бы можно было сделать индекс с конца, то наверное у нас на like 'Саша%' индекс перестал бы цепляться, а на like '%Саша' начал бы цепляться.


Нет, тоже надо было бы писать rev_tit like 'ашаС%'

LumixИли в таких случаях проще на клиенте флапануть данные и хранить их флипанутыми и флипануто же искать?


Ну, не обязательно, но можно и на клиенте. А можно в БД, триггером или процедурой формировать это второе поле.

Lumix
Код: plaintext
1.
2.
3.
4.
ятсоК ?каруд отК
ятеП ?каруд отК
метрА ?каруд отК
амиД ?каруд отК
ашаС ?каруд отК

А искать так

Код: sql
1.
select tit from t where tit like 'амиД%'
...
Рейтинг: 0 / 0
Индекс не на первые буквы, а на последние
    #39080682
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
понятно, что индексы когда учавствуют хорошо
но насколько это будет быстрее?
у меня p like %xxx% and p like %xxx% ищет и без таких замоочек быстро - 28 000 записей
...
Рейтинг: 0 / 0
Индекс не на первые буквы, а на последние
    #39080686
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivА вот некоторые другие СУБД могут индексы делать по выражениям -- оракл, например.Читал, что в версии 5.7 ожидается что-то такое.
...
Рейтинг: 0 / 0
Индекс не на первые буквы, а на последние
    #39080696
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, огромное спасибо за ответ!

вадяпонятно, что индексы когда учавствуют хорошо
но насколько это будет быстрее?
у меня p like %xxx% and p like %xxx% ищет и без таких замоочек быстро - 28 000 записей

Насколько я помню любая вилкарда в самом начале полностью сводит на нет любое использование индексов.
Гляньте explain. Скорее всего, для колонки p индексы там не используются вообще.
...
Рейтинг: 0 / 0
Индекс не на первые буквы, а на последние
    #39080701
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНасколько я помню любая вилкарда в самом начале полностью сводит на нет любое использование индексов.
Гляньте explain. Скорее всего, для колонки p индексы там не используются вообще.

дак и я о том же.
но скорость от этого не страдает, причем я говорю о времени всей системы - от ввода символа на клиенте(в браузере) до появления данных на клиенте(в браузере).
...
Рейтинг: 0 / 0
Индекс не на первые буквы, а на последние
    #39080794
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяно скорость от этого не страдаета чему там страдать на 28000 записей?
...
Рейтинг: 0 / 0
Индекс не на первые буквы, а на последние
    #39080798
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяпонятно, что индексы когда учавствуют хорошо
но насколько это будет быстрее?
у меня p like %xxx% and p like %xxx% ищет и без таких замоочек быстро - 28 000 записей
это как раз потому что записей не так много.
...
Рейтинг: 0 / 0
Индекс не на первые буквы, а на последние
    #39080800
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixMasterZiv, огромное спасибо за ответ!

вадяпонятно, что индексы когда учавствуют хорошо
но насколько это будет быстрее?
у меня p like %xxx% and p like %xxx% ищет и без таких замоочек быстро - 28 000 записей

Насколько я помню любая вилкарда в самом начале полностью сводит на нет любое использование индексов.
Гляньте explain. Скорее всего, для колонки p индексы там не используются вообще.

не любая. field like 'prefix%' будет отлично работать, особенно если префикс длинный.
...
Рейтинг: 0 / 0
Индекс не на первые буквы, а на последние
    #39080802
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivвадяпонятно, что индексы когда учавствуют хорошо
но насколько это будет быстрее?
у меня p like %xxx% and p like %xxx% ищет и без таких замоочек быстро - 28 000 записей
это как раз потому что записей не так много.
я догадываюсь , что все они влазят в кэш, но и 70 000работало быстро.
вопрос - с каким количеством будут тормоза?
если сейчас что-то оптимизировать - просто не увидишь какой из оптимизированных вариантов будет нести реальную пользу.
28 000 - рельные наименования товара оптовой конторы за приличное время работы конторы.
...
Рейтинг: 0 / 0
Индекс не на первые буквы, а на последние
    #39080895
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяя догадываюсь , что все они влазят в кэш, но и 70 000работало быстро.
вопрос - с каким количеством будут тормоза?С тем, когда перестанет укладываться в порог терпения ваших пользователей.
До тех пор, пока таблица влазит в кэш и достаточно долго не вымывается оттуда, рост времени выполнения такого рода запроса будет линейным от роста объема данных. Условно говоря, если сейчас выборка происходит за 100 мс, то при 70000 записей она будет происходить за 250-300 мс.
...
Рейтинг: 0 / 0
Индекс не на первые буквы, а на последние
    #39080955
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot вадя]MasterZivпропущено...

это как раз потому что записей не так много.
я догадываюсь , что все они влазят в кэш, но и 70 000работало быстро.
вопрос - с каким количеством будут тормоза?


Ну вообще-то это всё зависит от всяких параметров, но сотни тысяч или миллионы уже точно
не будут быстро работать.


если сейчас что-то оптимизировать - просто не увидишь какой из оптимизированных вариантов будет нести реальную пользу.


Это да, золотое правило: работает -- не трогай.
...
Рейтинг: 0 / 0
Индекс не на первые буквы, а на последние
    #39081776
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Нет, не будет он полностью бесполезен. Он будет бесполезен только если во всей таблице будет у всех строк поле tit начинаться
с этой одной и той же строки -- "Кто дурак?"


Вообще то, он хотел сказать, что только в этом случае и будет полезен .
Если вы используете "устаревший" myisam. Там строковые ключи пакуются. А в innodb нет.

Вывод - надо запретить innodb.
...
Рейтинг: 0 / 0
Индекс не на первые буквы, а на последние
    #39081780
netwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А! так товарищ хотел индекс на 8 букв создать. Ну так можно сделать на полную длину поля, если в myisam все упакуется.
Ишь, чуть что - сразу пытаются mysql опустить.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Индекс не на первые буквы, а на последние
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]