|
|
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Добавил индекс user_id,file_id,deleted,date_created Но оптимизатор его не хочет цеплять сам, и использует другой, из одного поля date_created. Если указать через FORCE INDEX то становится лучше, но использует не весь индекс Так понимаю какая-то сложность с NULL значениями, они индексируются вообще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 11:06:19 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
как понял NULL элементы в индексе не участвуют, такой норм работает user_id,deleted,date_created ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 12:25:38 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
Hettser_id,file_id,deleted,date_createdHettЕсли указать через FORCE INDEX то становится лучше, но использует не весь индексА весь тут не может использоваться в принципе. Только первые одно-два поля. Hettкак понял NULL элементы в индексе не участвуютУчаствуют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 12:30:20 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
А почему не может весь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 12:48:18 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
В последнем варианте экплейн не показывает filesort, так значит он дошел до этого поля в индексе и использовал его? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 12:49:06 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
HettА почему не может весь?Потому что условие file_id IS NOT NULL не может указать по какой ветке индекса идти дальше. Конкретно для этого запроса я бы предложил индекс (user_id, deleted, date_created, file_id) или (user_id, deleted, date_created). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 12:51:51 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
Так если NULL элементы участвуют, почему нету соотетствующей ветки? Или я чего-то не понимаю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 12:53:28 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
HettТак если NULL элементы участвуют, почему нету соотетствующей ветки? Или я чего-то не понимаю...Так условие на NOT NULL, т.е. нужны сразу все ветки кроме одной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 12:55:19 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
ой, понял, спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 12:56:08 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
Этот индекс немножко лучше (user_id, deleted, date_created, file_id) Как он фильтрует по file_id если в индексе оно идет уже позже сортировки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 12:59:29 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
HettЭтот индекс немножко лучше (user_id, deleted, date_created, file_id) Как он фильтрует по file_id если в индексе оно идет уже позже сортировки?Главное, что сортировка как таковая уже не нужна. Можно читать записи индекса в нужном месте последовательно и подходящие сразу выдавать на клиента, без накопления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 13:03:46 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
дошло, благодарю :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 13:08:26 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
Hett Добавил индекс user_id,file_id,deleted,date_created Лучше было бы добавлять user_id,deleted,date_created, file_id или вообще user_id,deleted,date_created Я бы делал индекс толкьо по user_id. Всё равно остальные условия малоселективны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.12.2014, 15:40:51 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
Да по user_id был индекс, но оказался мало эффективен, у пользователя может быть очень много файлов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2014, 08:21:01 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
так в общем случае сдесь впринципе логически индекс не применим. ибо. сортировка пополю А (не участвует в отборе) отбор по полю БВ не учавствует в сортировке итого для отбора если индекс задействовать, то он уже не применим к сортировке, то что будет применимо к сортировке - не сможет быть задействовано в отборе. а нащот использования индекса. то что поле индексировано, и оно учавствует в отборе, не означает что по индексу будет быстрее... простой пример. предположим наша таблица заполнена записиями длиной 100 байт каждая пятая подпадает под выборку по условию. --каждая двацатая, имееться ввиду вот их расположение физически в файле...тоесть на каждые 500 байт есть 100 нужные. итого...принимая во внимание что винчестер читаеться по 4кб и хоть тресни прийдёться читать весь кластер, то чем мыкаться по индексу, легче читать все подряд и уже самому по смещениям отсеять. - это в теории. я к тому что не факт что по индексу будет быстрее. и форс индекс дал чучуть лучше результат - возможно именно по этому...что вместо (как в нашем примере, 41 проверки в кластере для поиска нужных 8 блоков, мы уже сразу знали какие 8 надо...но читать то всёравно всё пришлось, и вырезки кусков делать теже...а эти операции более дорогие чем проверка...поэтому и результат "чучуть лудше" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2014, 14:01:35 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
alex564657498765453ак в общем случае сдесь впринципе логически индекс не применим. ибо. сортировка пополю А (не участвует в отборе) отбор по полю БВ не учавствует в сортировке итого для отбора если индекс задействовать, то он уже не применим к сортировке, то что будет применимо к сортировке - не сможет быть задействовано в отборе.Ну здрасьте. Индекс БВА очень даже применим. http://dev.mysql.com/doc/refman/5.5/en/order-by-optimization.html The following queries use the index to resolve the ORDER BY part: ... SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2014, 14:13:06 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
Ну вот есть индекс: user_id,deleted,date_created, file_id как понимаю работает так: читает ветку с нужным user_id, дальше по deleted в нужном направлении, и все, вот они данные, читает в нужном направлении в зависимости от сортиовки, при этом отфильтровываем по file_id ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2014, 14:26:20 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
HettНу вот есть индекс: user_id,deleted,date_created, file_id как понимаю работает так: читает ветку с нужным user_id, дальше по deleted в нужном направлении, и все, вот они данные, читает в нужном направлении в зависимости от сортиовки, при этом отфильтровываем по file_id ?Да, именно так. file_id, собственно, необязательно в этот индекс включать, т.к. все равно в таблицу лазить придется за другими полями. Зависит от селективности условия file_id IS NOT NULL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2014, 14:31:07 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
но он же все равно способен ускорить, ведь когда запись не подходит по условию, он ее отсеет только на основе индекса, не обращаясь к данным? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2014, 14:35:51 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
Hettно он же все равно способен ускорить, ведь когда запись не подходит по условию, он ее отсеет только на основе индекса, не обращаясь к данным?Ну если весь индекс уже лежит в кэше, то да. А если нет, то раздувать индекс тоже нехорошо. Его же с диска прочитать надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2014, 15:09:52 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
miksoftalex564657498765453ак в общем случае сдесь впринципе логически индекс не применим. ибо. сортировка пополю А (не участвует в отборе) отбор по полю БВ не учавствует в сортировке итого для отбора если индекс задействовать, то он уже не применим к сортировке, то что будет применимо к сортировке - не сможет быть задействовано в отборе.Ну здрасьте. Индекс БВА очень даже применим. http://dev.mysql.com/doc/refman/5.5/en/order-by-optimization.html The following queries use the index to resolve the ORDER BY part: ... SELECT * FROM t1 WHERE key_part1 = constant ORDER BY key_part2; ну и бва не применим!!! у тебя по индексу значения 1 1 в 1 2 б 2 1 а вот по индексу они лежат, а сортировать надо только по третей колонке! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2014, 17:14:36 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
alex564657498765453miksoftпропущено... Ну здрасьте. Индекс БВА очень даже применим.пропущено... ну и бва не применим!!! у тебя по индексу значения 1 1 в 1 2 б 2 1 а вот по индексу они лежат, а сортировать надо только по третей колонке!Ну так перед этим же идет отбор по полям Б и В. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2014, 17:22:14 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
миксофт...тоесть ты хочешь сказать что если у меня индекс wxyz - 4 bytes - одно поле то я с таким индексом не смогу сортировать по последнему байту но если это 4 поля однобайтовых- то смогу??? как? вот хочу сделать просто выборку из базы - все но сортировать по последнему полю в индексе составном...и как мускл должен это сделать? а даже если и отбор сделан по Б и В - ну нашло оно ветку индекса и??? чем это отличаеться от ситуации когда в базе все значения у Б и В одинаковые, и такой выбор будет неотличим от выборки всего??? технически - у мкскла при попадании на ветку в индексном дереве, когда оставшаяся часть исключительно есть значения А - то можно и посортировать по индексу - а точнее оно уже так, но мускл , лично мне помниться...сдесь же на форуме проскакивало....до таких тонкостей не додумаеться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2014, 17:26:38 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
alex564657498765453технически - у мкскла при попадании на ветку в индексном дереве, когда оставшаяся часть исключительно есть значения А - то можно и посортировать по индексу - а точнее оно уже так, но мускл , лично мне помниться...сдесь же на форуме проскакивало....до таких тонкостей не додумаеться.я даже доку выше процитировал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2014, 17:29:35 |
|
||
|
Помогите с индексом
|
|||
|---|---|---|---|
|
#18+
miksoftalex564657498765453технически - у мкскла при попадании на ветку в индексном дереве, когда оставшаяся часть исключительно есть значения А - то можно и посортировать по индексу - а точнее оно уже так, но мускл , лично мне помниться...сдесь же на форуме проскакивало....до таких тонкостей не додумаеться.я даже доку выше процитировал. а я уже на мускле у себя проверил... блин, приятно зайти на форум, на шару поучиться у миксофта :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2014, 17:30:26 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=152&tid=1833826]: |
0ms |
get settings: |
11ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
49ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 370ms |

| 0 / 0 |
