|
|
|
Эффективность индексов по хвостам
|
|||
|---|---|---|---|
|
#18+
несколько дней назад не помню где возник вопрос и что-то он мне продолжает сверлить голову... вопрос касается индексов индексы - это усеченная структурированная организация для ускорения поиска и я всегда ей верил, но только сейчас я задумался, а ведь когда мы ставим длину индекса 5 байт, то получается, что этот индекс полностью теряет свою эффективность, если вдруг гипотетически окажется, что вся разница между полями происходит только с 8 или 12 байта... предположим пример допустим Юлечка-дурочка решила хранить урлы статистики не хвостами, а целиком вот так Код: sql 1. 2. 3. 4. значит ли это что любой индекс ниже 24 байт просто нахфиг теряет свою эффективность и смысл???? тупо потому что у нас все различия начинаются не раньше 25ого чара... или я ошибочно понимаю природу индексов?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2014, 14:58:13 |
|
||
|
Эффективность индексов по хвостам
|
|||
|---|---|---|---|
|
#18+
Lumixзначит ли это что любой индекс ниже 24 байт просто нахфиг теряет свою эффективность и смысл???? тупо потому что у нас все различия начинаются не раньше 25ого чара...Насколько я в курсе - да, именно так. Вообще, строковые поля в индексах могут быть скомпрессированы, но, насколько я понимаю, обрезка префикса происходит до компрессии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2014, 15:22:18 |
|
||
|
Эффективность индексов по хвостам
|
|||
|---|---|---|---|
|
#18+
miksoftLumixзначит ли это что любой индекс ниже 24 байт просто нахфиг теряет свою эффективность и смысл???? тупо потому что у нас все различия начинаются не раньше 25ого чара...Насколько я в курсе - да, именно так. Вообще, строковые поля в индексах могут быть скомпрессированы, но, насколько я понимаю, обрезка префикса происходит до компрессии. мне в голову приходит только одно решение: создавать дополнительное поле, которое будет содержать нормализированные данные, специально заточенные для эффективной работы индексов, а то в соответствие с этим новым открытием получается, что для поиск по статьям с помощью лайков индексы вообще нафиг не нужны, потому что статьи обычно начинаются от 1-1,5 тыс знаков, а бывают и по 10-20 тыс. знаков... получается, что для того, чтобы индекс имел хоть какое-то значение, придется на клиенте каждую статью пилить на киворды, затем строить таблицу (keyId, txtKey (index 64), pageId) и только после этого индекс будет иметь хоть какое-то значение... сегодня с этой мыслью пересплю и если никаких идей не появится, то завтра дам распоряжение выкинуть нафиг все индексы из таблиц по текстовым полям, все равно по ним толку никакого нету.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2014, 16:19:33 |
|
||
|
Эффективность индексов по хвостам
|
|||
|---|---|---|---|
|
#18+
Lumixсоздавать дополнительное поле, которое будет содержать нормализированные данные, специально заточенные для эффективной работы индексовВ приличных СУБД существуют FBI и реверсные индексы. В сумме или по отдельности они весьма помогают в проблеме длинных одинаковых префиксов. Дополнительным полем в MySQL можно имитировать такие функции. Lumixдля поиск по статьям с помощью лайков индексы вообще нафиг не нужны, потому что статьи обычно начинаются от 1-1,5 тыс знаков, а бывают и по 10-20 тыс. знаков...Конечно, не нужны. Но не по причине ограниченности длины префиксов, а потому что обычно поиск по тексту происходит по маске '%подстрока%', а для нее обычные индексы бесполезны независимо от длины префикса. Lumixполучается, что для того, чтобы индекс имел хоть какое-то значение, придется на клиенте каждую статью пилить на киворды, затем строить таблицу (keyId, txtKey (index 64), pageId) и только после этого индекс будет иметь хоть какое-то значение...Обычно это решается полнотекстовыми индексами или сфинксом. Lumixсегодня с этой мыслью пересплю и если никаких идей не появится, то завтра дам распоряжение выкинуть нафиг все индексы из таблиц по текстовым полям, все равно по ним толку никакого нету....Вы это, осторожнее :) Индексы еще бывают, например, покрывающие. В случае с текстами, конечно, оно вряд ли, но мало ли... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2014, 16:30:07 |
|
||
|
Эффективность индексов по хвостам
|
|||
|---|---|---|---|
|
#18+
miksoftпотому что обычно поиск по тексту происходит по маске '%подстрока%', а для нее обычные индексы бесполезны независимо от длины префикса эх... жизнь - боль!!!))) все чаще и чаще мне приходится вспоминать слова царя Соломона: многие знания умножают скорбь.. чем больше понимаешь как все на самом деле работает и как все на самом деле устроено, тем более тоскливо становится... а ведь как хорошо было когда я юный и тупой верил, что индексы волшебным образом все ускоряют в 100500 раз и с чистым сердцем использовал не только лайки с обрамленными процентами но даже регеспы!! потом я узнал, что индексы на регеспы не распространяются и мне стало грустно, я перешел на лайки, а теперь выяснилось, что и лайки с индексами не дружат... и мне совсем загрустилось... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2014, 17:05:59 |
|
||
|
Эффективность индексов по хвостам
|
|||
|---|---|---|---|
|
#18+
Lumixдопустим Юлечка-дурочка решила хранить урлы статистики не хвостами, а целиком вот так Код: sql 1. 2. 3. 4. Если речь о статистике - тем более детализованной статистике - может статься так, что она ни разу не дурочка... а ну как потребуется подключить к системе ещё и пачку виртуальных хостов со своими доменными именами? Так что думать надо скорее не о том, какая она дура, а о том, как правильно построить индексирование в данном случае - что в свою очередь определяется задачами на получаемых данных. И тут вариантов - море разливанное. Добавить поле "последнего каталога" и индексировать по нему. Добавить поле контрольной суммы и индексировать по нему. Добавить реверсивное поле и индексировать по его префиксу. Хранить в реверсивном порядке, обеспечивая восстановление при получении данных. И т.д., и т.п... Вполне может статься, что в каком-то из вариантов система получится куда как более эффективная и гибкая, чем в случае, когда несчастную Юлечку обозвали дурой и резанули-захардкодили префикс. Ну и уж совсем никуда - убить индексы, потому что они кажутся неэффективными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2014, 17:19:40 |
|
||
|
Эффективность индексов по хвостам
|
|||
|---|---|---|---|
|
#18+
Lumix, авторкогда мы ставим длину индекса 5 байт, то получается, что этот индекс полностью теряет свою эффективность, если вдруг гипотетически окажется, что вся разница между полями происходит только с 8 или 12 байта... угу, для этого делается простой анализ типа: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. смотрим кардиналити, чешем репу, пьем пивка и создаем правильный размер индекса... ...все гда полезно знать свои данные... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2014, 18:00:00 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38757654&tid=1834181]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
51ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 315ms |

| 0 / 0 |
