Здравствуйте дорогие друзья. Увлекся оптимизацией запросов и увидил что реально система летит.Поэтому все глубже ухожу в данную сторону.Помоги понять следующую таблицу: Я просто не могу понять почему дублируються вот например product,product_2, product_3 .Это несколько раз присваивался индекс или есть другая причина?
ты наебенил на каждое поле по индексу, а то и по парочке? при вставке или апдейте обновляются все индексы, что долго. ты смотри, заоптимизируешь сервак до смерти.
https://habrahabr.ru/company/postgrespro/blog/326096/ правда там о postgres и некоторые вещи специфичны, но в целом понимание даст. Индекс на каждое поле - это лютый капец, на столько, что лучше вообще без них. Вообще, нет смысла гадать на индексах заранее. Потому что долгий запрос - не всегда проблема, к примеру он выполняется раз в пятилетку, толку с него... В то же время могут быть запросы, выполняющиеся очень часто в тех или иных вариациях и специфичный именно для них индекс может резко снизить нагрузку на сервак. А ещё, планировщик запроса может пойти только ему одному понятным способом, начисто игнорируя ваши индексы, просто потому что так всё равно быстрее ) А значит надо делать explain и смотреть, какие реально связи он использует для выборки и в каком порядке. Потому что индекс на самую нижнюю итерацию даст 90% возможного ускорения, а на верхнюю не даст ничего. А ещё надо курить сами запросы, к примеру, на большой-большой таблице людей вы ищете тех, кто знает PHP, может быть у вас есть поле "увлекается программированием", добавив на него индекс и условие к запросу вы резко апните его скорость, за счет уменьшение размера изначальной выборки. Короче, магии тут нет никакой, в результате получаются всё те же циклы и условия. Важно понимать какие и что каждый индекс не только ускоряет запрос, но и увеличивает нагрузку на поддержание своей актуальности.