Я пытаюсь оптимизировать мой INNER JOIN заявления на следующих таблицах:Оптимизировать INNER JOIN заявления через индексы столбцов
[articlegroups] содержит ~ 700 строк
[продукты] содержит ~ 150,000 строк
[products_category_mapping] содержит 1 до 3 строк для каждого продукта в [продуктов] (так в любом месте между 150,000 и 450.000 строк)
Вот мой текущий запрос:
SELECT ga.label_sp,ga.label_en,ga.slug_sp,ga.slug_en,ga.pagetitle_sp,ga.pagetitle_en,ga.image_sp,ga.image_en,ga.description_sp,ga.description_en,ga.metadescription_sp,ga.metadescription_en
FROM articlegroups ga WITH (NOLOCK)
INNER JOIN products_category_mapping pcm on pcm.articlegroup_id=ga.id
INNER JOIN products gp on gp.id=pcm.artikelid
WHERE gp.id=<PRODUCTID> AND ga.catlevel=0
Я читаю здесь http://www.sql-server-performance.com/2006/tuning-joins/, что я могу сделать, это добавить индексы в столбцы, по которым соединяются таблицы.
Теперь я задаюсь вопросом, что приведет к наилучшей производительности: Добавление индекса в products_category_mapping.artikelid и/или в products_category_mapping.articlegroup_id и какой индекс? Должен ли я добавлять индексы в оба столбца? Должен ли я сделать один из них сгруппированным, и если да, то какой? Теперь я добавил индексы в оба столбца и кластеризованный индекс в products_category_mapping.artikelid, так как я, хотя последний столбец мог иметь самые разные результаты и потребовал бы самой высокой скорости. Я не уверен, что я прав в том, что я сейчас делаю.
С каких таблиц появляются ваши поля 'label' и' page'? Если вы можете добавить их как 'include' в свой индекс, вы можете вообще не столкнуться с таблицей. –
@BrianStork см. Мое обновленное заявление. Я также добавил все поля в моем запросе (который я удалил для простоты). Ваше предложение по-прежнему работает с большим количеством полей, и если да, как бы включить их в свой индекс, чтобы избежать попадания в эту таблицу? – Flo