Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Эффективность индексов по хвостам / 7 сообщений из 7, страница 1 из 1
25.09.2014, 14:58:13
    #38757611
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность индексов по хвостам
несколько дней назад не помню где возник вопрос и что-то он мне продолжает сверлить голову...
вопрос касается индексов

индексы - это усеченная структурированная организация для ускорения поиска и я всегда ей верил, но только сейчас я задумался, а ведь когда мы ставим длину индекса 5 байт, то получается, что этот индекс полностью теряет свою эффективность, если вдруг гипотетически окажется, что вся разница между полями происходит только с 8 или 12 байта...

предположим пример
допустим Юлечка-дурочка решила хранить урлы статистики не хвостами, а целиком вот так
Код: sql
1.
2.
3.
4.
http://www.sql.ru/forum/1/
http://www.sql.ru/forum/2/
http://www.sql.ru/forum/3/
...



значит ли это что любой индекс ниже 24 байт просто нахфиг теряет свою эффективность и смысл???? тупо потому что у нас все различия начинаются не раньше 25ого чара... или я ошибочно понимаю природу индексов??
...
Рейтинг: 0 / 0
25.09.2014, 15:22:18
    #38757654
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность индексов по хвостам
Lumixзначит ли это что любой индекс ниже 24 байт просто нахфиг теряет свою эффективность и смысл???? тупо потому что у нас все различия начинаются не раньше 25ого чара...Насколько я в курсе - да, именно так.

Вообще, строковые поля в индексах могут быть скомпрессированы, но, насколько я понимаю, обрезка префикса происходит до компрессии.
...
Рейтинг: 0 / 0
25.09.2014, 16:19:33
    #38757777
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность индексов по хвостам
miksoftLumixзначит ли это что любой индекс ниже 24 байт просто нахфиг теряет свою эффективность и смысл???? тупо потому что у нас все различия начинаются не раньше 25ого чара...Насколько я в курсе - да, именно так.

Вообще, строковые поля в индексах могут быть скомпрессированы, но, насколько я понимаю, обрезка префикса происходит до компрессии.

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

получается, что для того, чтобы индекс имел хоть какое-то значение, придется на клиенте каждую статью пилить на киворды, затем строить таблицу (keyId, txtKey (index 64), pageId) и только после этого индекс будет иметь хоть какое-то значение...

сегодня с этой мыслью пересплю и если никаких идей не появится, то завтра дам распоряжение выкинуть нафиг все индексы из таблиц по текстовым полям, все равно по ним толку никакого нету....
...
Рейтинг: 0 / 0
25.09.2014, 16:30:07
    #38757792
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность индексов по хвостам
Lumixсоздавать дополнительное поле, которое будет содержать нормализированные данные, специально заточенные для эффективной работы индексовВ приличных СУБД существуют FBI и реверсные индексы. В сумме или по отдельности они весьма помогают в проблеме длинных одинаковых префиксов.
Дополнительным полем в MySQL можно имитировать такие функции.
Lumixдля поиск по статьям с помощью лайков индексы вообще нафиг не нужны, потому что статьи обычно начинаются от 1-1,5 тыс знаков, а бывают и по 10-20 тыс. знаков...Конечно, не нужны. Но не по причине ограниченности длины префиксов, а потому что обычно поиск по тексту происходит по маске '%подстрока%', а для нее обычные индексы бесполезны независимо от длины префикса.
Lumixполучается, что для того, чтобы индекс имел хоть какое-то значение, придется на клиенте каждую статью пилить на киворды, затем строить таблицу (keyId, txtKey (index 64), pageId) и только после этого индекс будет иметь хоть какое-то значение...Обычно это решается полнотекстовыми индексами или сфинксом.
Lumixсегодня с этой мыслью пересплю и если никаких идей не появится, то завтра дам распоряжение выкинуть нафиг все индексы из таблиц по текстовым полям, все равно по ним толку никакого нету....Вы это, осторожнее :)
Индексы еще бывают, например, покрывающие. В случае с текстами, конечно, оно вряд ли, но мало ли...
...
Рейтинг: 0 / 0
25.09.2014, 17:05:59
    #38757862
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность индексов по хвостам
miksoftпотому что обычно поиск по тексту происходит по маске '%подстрока%', а для нее обычные индексы бесполезны независимо от длины префикса

эх... жизнь - боль!!!)))

все чаще и чаще мне приходится вспоминать слова царя Соломона: многие знания умножают скорбь.. чем больше понимаешь как все на самом деле работает и как все на самом деле устроено, тем более тоскливо становится...

а ведь как хорошо было когда я юный и тупой верил, что индексы волшебным образом все ускоряют в 100500 раз и с чистым сердцем использовал не только лайки с обрамленными процентами но даже регеспы!! потом я узнал, что индексы на регеспы не распространяются и мне стало грустно, я перешел на лайки, а теперь выяснилось, что и лайки с индексами не дружат... и мне совсем загрустилось...
...
Рейтинг: 0 / 0
25.09.2014, 17:19:40
    #38757886
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность индексов по хвостам
Lumixдопустим Юлечка-дурочка решила хранить урлы статистики не хвостами, а целиком вот так
Код: sql
1.
2.
3.
4.
http://www.sql.ru/forum/1/
http://www.sql.ru/forum/2/
http://www.sql.ru/forum/3/
...


Если речь о статистике - тем более детализованной статистике - может статься так, что она ни разу не дурочка... а ну как потребуется подключить к системе ещё и пачку виртуальных хостов со своими доменными именами?
Так что думать надо скорее не о том, какая она дура, а о том, как правильно построить индексирование в данном случае - что в свою очередь определяется задачами на получаемых данных. И тут вариантов - море разливанное. Добавить поле "последнего каталога" и индексировать по нему. Добавить поле контрольной суммы и индексировать по нему. Добавить реверсивное поле и индексировать по его префиксу. Хранить в реверсивном порядке, обеспечивая восстановление при получении данных. И т.д., и т.п... Вполне может статься, что в каком-то из вариантов система получится куда как более эффективная и гибкая, чем в случае, когда несчастную Юлечку обозвали дурой и резанули-захардкодили префикс.
Ну и уж совсем никуда - убить индексы, потому что они кажутся неэффективными.
...
Рейтинг: 0 / 0
25.09.2014, 18:00:00
    #38757974
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность индексов по хвостам
Lumix,

авторкогда мы ставим длину индекса 5 байт, то получается, что этот индекс полностью теряет свою эффективность, если вдруг гипотетически окажется, что вся разница между полями происходит только с 8 или 12 байта...

угу, для этого делается простой анализ типа:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select
count(distinct(z,1,3)) cnt3,
count(distinct(z,1,4)) cnt4,
count(distinct(z,1,5)) cnt5,
count(distinct(z,1,6)) cnt6,
count(distinct(z,1,7)) cnt7,
count(z) cnt,
count(*) cnt0
from tbl



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

...все гда полезно знать свои данные...
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Эффективность индексов по хвостам / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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