У меня есть около 1 миллиона записей для моей таблицы фирмы и это утверждение
SELECT firma.adi,firma.tel, firma.cep, firma.adres,
firma.etiket, sehir.ad, ilce.ilce_adi, ustkat.ust_adi
FROM firma
inner join sektor on sektor.s_fid=firma.id
inner join ustkat on ustkat.ust_id=sektor.s_ustid
inner join sehir on sehir.id=firma.sehir
inner join ilce on ilce.ilceid=firma.ilce
WHERE firma.uyeliktur<4 and firma.onay=1 and
firma.zoom>0 and firma.koordinat>0
GROUP BY firma.id
ORDER BY firma.uyeliktur desc, firma.bastarih desc
Как я могу использовать MySQL индекс для этого.
Вы хотели бы индекс со всеми столбцами в where
пункт. Первое должно быть onay
(из-за условия равенства). Вторым должно быть любое условие, которое является наиболее ограничительным. Один из них:
firma(onay, uyeliktur, zoom, koordinat)
firma(onay, zoom, uyeliktur, koordinat)
firma(onay, koordinat, uyeliktur, zoom)
Только первые два столбца используются непосредственно для поиска строк для where
, Два других имеют небольшую эффективность, поэтому where
значения там.
Если, кстати, на самом деле это флаги, вам лучше сказать zoom = 1
чем zoom > 0
,
Других решений пока нет …