我的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 = 1zoom > 0

10-08 11:41