我的Firma表和此声明有近一百万条记录
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
。