powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с индексом
25 сообщений из 25, страница 1 из 1
Помогите с индексом
    #38827789
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT * 
FROM tbl t
WHERE 
  t.file_id IS NOT NULL
  AND t.deleted = 0
  AND t.user_id = '260232'
ORDER BY `t`.`date_created` DESC 
LIMIT 25



Добавил индекс

user_id,file_id,deleted,date_created

Но оптимизатор его не хочет цеплять сам, и использует другой, из одного поля date_created.
Если указать через FORCE INDEX то становится лучше, но использует не весь индекс

Так понимаю какая-то сложность с NULL значениями, они индексируются вообще?
...
Рейтинг: 0 / 0
Помогите с индексом
    #38827893
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как понял NULL элементы в индексе не участвуют, такой норм работает
user_id,deleted,date_created
...
Рейтинг: 0 / 0
Помогите с индексом
    #38827896
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hettser_id,file_id,deleted,date_createdHettЕсли указать через FORCE INDEX то становится лучше, но использует не весь индексА весь тут не может использоваться в принципе. Только первые одно-два поля.
Hettкак понял NULL элементы в индексе не участвуютУчаствуют.
...
Рейтинг: 0 / 0
Помогите с индексом
    #38827906
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему не может весь?
...
Рейтинг: 0 / 0
Помогите с индексом
    #38827907
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В последнем варианте экплейн не показывает filesort, так значит он дошел до этого поля в индексе и использовал его?
...
Рейтинг: 0 / 0
Помогите с индексом
    #38827914
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettА почему не может весь?Потому что условие file_id IS NOT NULL не может указать по какой ветке индекса идти дальше.

Конкретно для этого запроса я бы предложил индекс (user_id, deleted, date_created, file_id) или (user_id, deleted, date_created).
...
Рейтинг: 0 / 0
Помогите с индексом
    #38827920
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так если NULL элементы участвуют, почему нету соотетствующей ветки?
Или я чего-то не понимаю...
...
Рейтинг: 0 / 0
Помогите с индексом
    #38827922
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettТак если NULL элементы участвуют, почему нету соотетствующей ветки?
Или я чего-то не понимаю...Так условие на NOT NULL, т.е. нужны сразу все ветки кроме одной.
...
Рейтинг: 0 / 0
Помогите с индексом
    #38827925
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой, понял,
спасибо
...
Рейтинг: 0 / 0
Помогите с индексом
    #38827932
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот индекс немножко лучше
(user_id, deleted, date_created, file_id)

Как он фильтрует по file_id если в индексе оно идет уже позже сортировки?
...
Рейтинг: 0 / 0
Помогите с индексом
    #38827938
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettЭтот индекс немножко лучше
(user_id, deleted, date_created, file_id)

Как он фильтрует по file_id если в индексе оно идет уже позже сортировки?Главное, что сортировка как таковая уже не нужна. Можно читать записи индекса в нужном месте последовательно и подходящие сразу выдавать на клиента, без накопления.
...
Рейтинг: 0 / 0
Помогите с индексом
    #38827946
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дошло, благодарю :)
...
Рейтинг: 0 / 0
Помогите с индексом
    #38828163
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett
Добавил индекс

user_id,file_id,deleted,date_created




Лучше было бы добавлять
user_id,deleted,date_created, file_id

или вообще

user_id,deleted,date_created

Я бы делал индекс толкьо по user_id.
Всё равно остальные условия малоселективны.
...
Рейтинг: 0 / 0
Помогите с индексом
    #38828584
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да по user_id был индекс, но оказался мало эффективен, у пользователя может быть очень много файлов.
...
Рейтинг: 0 / 0
Помогите с индексом
    #38828945
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так в общем случае сдесь впринципе логически индекс не применим.

ибо.

сортировка пополю А (не участвует в отборе)

отбор по полю БВ не учавствует в сортировке

итого для отбора если индекс задействовать, то он уже не применим к сортировке, то что будет применимо к сортировке - не сможет быть задействовано в отборе.

а нащот использования индекса. то что поле индексировано, и оно учавствует в отборе, не означает что по индексу будет быстрее...

простой пример.

предположим наша таблица заполнена записиями длиной 100 байт

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

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

и форс индекс дал чучуть лучше результат - возможно именно по этому...что вместо (как в нашем примере, 41 проверки в кластере для поиска нужных 8 блоков, мы уже сразу знали какие 8 надо...но читать то всёравно всё пришлось, и вырезки кусков делать теже...а эти операции более дорогие чем проверка...поэтому и результат "чучуть лудше"
...
Рейтинг: 0 / 0
Помогите с индексом
    #38828974
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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;
...
Рейтинг: 0 / 0
Помогите с индексом
    #38829006
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот есть индекс:

user_id,deleted,date_created, file_id

как понимаю работает так:
читает ветку с нужным user_id, дальше по deleted в нужном направлении, и все, вот они данные, читает в нужном направлении в зависимости от сортиовки, при этом отфильтровываем по file_id ?
...
Рейтинг: 0 / 0
Помогите с индексом
    #38829016
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettНу вот есть индекс:

user_id,deleted,date_created, file_id

как понимаю работает так:
читает ветку с нужным user_id, дальше по deleted в нужном направлении, и все, вот они данные, читает в нужном направлении в зависимости от сортиовки, при этом отфильтровываем по file_id ?Да, именно так.
file_id, собственно, необязательно в этот индекс включать, т.к. все равно в таблицу лазить придется за другими полями. Зависит от селективности условия file_id IS NOT NULL.
...
Рейтинг: 0 / 0
Помогите с индексом
    #38829025
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но он же все равно способен ускорить, ведь когда запись не подходит по условию, он ее отсеет только на основе индекса, не обращаясь к данным?
...
Рейтинг: 0 / 0
Помогите с индексом
    #38829071
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hettно он же все равно способен ускорить, ведь когда запись не подходит по условию, он ее отсеет только на основе индекса, не обращаясь к данным?Ну если весь индекс уже лежит в кэше, то да. А если нет, то раздувать индекс тоже нехорошо. Его же с диска прочитать надо.
...
Рейтинг: 0 / 0
Помогите с индексом
    #38829275
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 а

вот по индексу они лежат, а сортировать надо только по третей колонке!
...
Рейтинг: 0 / 0
Помогите с индексом
    #38829292
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453miksoftпропущено...
Ну здрасьте. Индекс БВА очень даже применим.пропущено...


ну и бва не применим!!!

у тебя по индексу значения
1 1 в
1 2 б
2 1 а

вот по индексу они лежат, а сортировать надо только по третей колонке!Ну так перед этим же идет отбор по полям Б и В.
...
Рейтинг: 0 / 0
Помогите с индексом
    #38829300
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
миксофт...тоесть ты хочешь сказать что если у меня индекс

wxyz - 4 bytes - одно поле
то я с таким индексом не смогу сортировать по последнему байту

но если это 4 поля однобайтовых- то смогу???

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

а даже если и отбор сделан по Б и В - ну нашло оно ветку индекса и???

чем это отличаеться от ситуации когда в базе все значения у Б и В одинаковые, и такой выбор будет неотличим от выборки всего???



технически - у мкскла при попадании на ветку в индексном дереве, когда оставшаяся часть исключительно есть значения А - то можно и посортировать по индексу - а точнее оно уже так, но мускл , лично мне помниться...сдесь же на форуме проскакивало....до таких тонкостей не додумаеться.
...
Рейтинг: 0 / 0
Помогите с индексом
    #38829302
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453технически - у мкскла при попадании на ветку в индексном дереве, когда оставшаяся часть исключительно есть значения А - то можно и посортировать по индексу - а точнее оно уже так, но мускл , лично мне помниться...сдесь же на форуме проскакивало....до таких тонкостей не додумаеться.я даже доку выше процитировал.
...
Рейтинг: 0 / 0
Помогите с индексом
    #38829304
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftalex564657498765453технически - у мкскла при попадании на ветку в индексном дереве, когда оставшаяся часть исключительно есть значения А - то можно и посортировать по индексу - а точнее оно уже так, но мускл , лично мне помниться...сдесь же на форуме проскакивало....до таких тонкостей не додумаеться.я даже доку выше процитировал.

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


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