Имеет ли смысл в WHERE указывать индексы первее чем другие поля?

nigirma

Новичок
есть у меня БД со следующими полями:
id
parent
status
user
comment
date
...

Индексами являются id (PRIMARY) и parent (INDEX).

Есть ли в таком случае разница между запросами (например, в производительности):
WHERE `id`='21' AND `parent`='32' AND `status`='1' AND `user`='test'
и
WHERE `status`='1' AND `user`='test' AND `parent`='32' AND `id`='21'

Имеет ли смысл в WHERE указывать индексы первее чем другие поля?
 

zerkms

TDD infected
Команда форума
nigirma
В запросах ты всегда указываешь только имена полей, а какие и как использовать индексы mysql сам решит.
 

iceman

говнокодер
nigirma
порядок важен для для индексов в несколько полей.

zerkms
при условие, что индекс не по функции.
 

zerkms

TDD infected
Команда форума
iceman
1. в mysql нет индексов построенных на функциях
2. даже если будет написан вызов функции - ты всего лишь указываешь выражение, а не индекс. А что и как будет использовать построитель плана - уже от тебя не зависит.

порядок важен для для индексов в несколько полей.
глупости. Порядок указания полей в where ни на что не влияет.
 

iceman

говнокодер
индексы func(column_name) и column_name совершенно разные, если в запросе указать только column_name, то func(column_name) то точно использоватся не будет, по какой логике его использовать?

> глупости. Порядок указания полей в where ни на что не влияет.
хм, я всегда считал что имеет...
 

Gas

может по одной?
iceman
В том контексте что спросил nigirma, порядок полей ни на что не влияет.
Может ты путаешь с составным индексом и наличием его частей в where?
 

iceman

говнокодер
Gas
да, наличия его частей! и порядок этих частей! в where, это я имел ввиду.

zerkms
сам не тупи.
 

zerkms

TDD infected
Команда форума
iceman
Порядок указания частей в WHERE не имеет никакого значения. Равно как и упоминание function based индексов было совсем мимо кассы.

Повторяю ещё раз: в запросах мы всегда указываем ТОЛЬКО ПОЛЯ (забудем про хинты), индексы мы не указываем никогда. Даже если у нас постгря/оракл и function based index, и мы пишем WHERE foo('bar') = 'val' - то в этом случае мы тоже указываем лишь выражение, а какой индекс и как использовать - это работа оптимизатора.
 

LONGMAN

Dark Side of the Moon..
iceman
Порядок указания частей в WHERE не имеет никакого значения. Равно как и упоминание function based индексов было совсем мимо кассы.
Я тоже всегда думал что порядок имеет значения, особенно когда используется поля из составного индекса.
 

zerkms

TDD infected
Команда форума
Омг, господа, скажите, пожалуйста, что вы шутите?

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

FROM table INNER JOIN table2

оптимизатор часто меняет таблицы местами, чтобы выбирать из table2, а джоинить table (потому что считает, что так план выполнения будет эффективнее) и делает много других достаточно сложных и умных вещей.
 

Gas

может по одной?
Омг, господа, скажите, пожалуйста, что вы шутите?
+1, в любой базе данных есть optimizator, который разбирает запрос и подбирает наилучший план выполнения, такие мелочи как порядок для него совсем ерунда, для инересующихся есть такая ссылка - http://forge.mysql.com/wiki/How_does_the_MySQL_Optimizer_work

Просто непонятно откуда вы взяли про порядок, в документации нигде об этом не написано, по explain'ам это тоже сразу видно или explain уже не в моде, да я упустил :)
 

LONGMAN

Dark Side of the Moon..
zerkms
А порядок полей в составном индексе ведь имеет значения?
 

iceman

говнокодер
zerkms
> а какой индекс и как использовать - это работа оптимизатора
> foo('bar') = 'val'

тебе кто то говорит против того, что оптимизатор сам выбирает? может и вообще фулскан сделать, никто ничо против не имеет,
я имел ввиду если есть индекс foo('bar'), а в выражение написано WHERE `bar` = 'val' то индекс foo('bar') уж точно не будет использоваться.
 

zerkms

TDD infected
Команда форума
iceman
Конечно не будет. Только какой смысл было говорить об этом мне и пытаться спорить, если я это и так знаю? :)
 

zerkms

TDD infected
Команда форума
Gas
Кстати не видел эту ссылку ни разу почему-то. Добавил в мастрид :)
 
Сверху