Например, есть таблица и поля в ней:
entityId, name, country, value
primaryKey сделал составной: entityId, name, country
правильно ли я понимаю, что если я буду делать селект по этим трем полям в таблице в одном запросе, то чтобы правильно отрабатывал индекс, нужно делать WHERE сначала по entityId, второй WHERE - name, и третий where должен быть country. Если поменять порядок, то индекс просто не отработает
Правильно ли понимаю ?
нет. главное чтоб в where были или первое поле, или первых два поля, или все 3 поля. в каком порядке вы их напишете в запросе - без разницы.
т.е. where country = ?? использовать индекс не будет вообще, а where country = ?? and entityId = ?? будет использовать только первую часть составного индекса (по ентитиИд).
А подскажите такой момент, а если мне надо в каких то ситуациях будет делать селект по name, country (без entityId), мне лучше накинуть на них отдельный составной индекс? ayazer
driverx18, с точки зрения производительности - конечно составной будет работать быстрее. но тут скорее о балансе между скоростью выполнения и ценой разработки. на моей памяти я никогда не упирался в то, что в каком-то месте использую 2-3 обычных индекса вместо составного. А вот ситуаций когда через пару лет пришлось добавлять индексов т.к. старые составные перестали покрывать все ситуации - видел достаточно. Как и ошибок что кто-то неправильно использовал составной индекс в следствии чего начинали прилетать фуллсканы по таблицам в пару террабайт.
если резюмировать - если вы не уверены в характере нагрузки - делайте как проще будет развивать дальше. если/когда упретесь в нехватку производительности - вернетесь и пересмотрите еще раз (но уже абсолютно точно понимая характер нагрузки).
Все что нужно - это выполнить запросы с EXPLAIN, он тебе покажет 100% информацию используется индекс или нет. И сразу нет необходимости гадать о правильности понимания. www.mysql.ru/docs/man/EXPLAIN.html
driverx18, не понял, запрос рандомно формируется по рандомным таблицам ? Просто както выражение "при проектировании новых таблиц" не совсем вяжется с отсутствием знания о применении эксплейна.