2016-05-31 61 views
0
SELECT ID,uye,kazanilacakmiktar FROM kupon WHERE durum=0 AND ID IN (
select c.kupon 
from kuponbahis c join 
    bahis b 
    on ((b.sonuc = c.secim) OR (b.sonuc=5)) and b.ID = c.bahis 
group by c.kupon 
having sum(c.bahis = '999') > 0 and 
     count(*) = (SELECT COUNT(*) FROM kuponbahis WHERE kupon = c.kupon)); 

我有这样的查询。我有索引kupon.ID, kupon.uye, kupon.kazanilacakmiktar, kuponbahis.bahis, kuponbahis.secim但它仍然有一个重要的运行时间。哪些列在MySQL中编制索引?

我错过了什么,我做错了什么?

+1

您可能想要提供有关样本数据和期望结果的其他问题。可能有更好的方法来编写查询。 –

+0

如果你用简单的英语写出所有东西,你会有更多的敏锐的反应...即kupon =>优惠券。理解起来要容易得多。您需要添加更多信息 - 列出所有字段和唯一性的索引以及每个表的行数。 –

回答

2

用于查询的明显指标是:

  • kupon(durum, id)
  • kuponbahis(kupon)
  • bahis(id, sonuc)

不过,我不相信,这些指标将是T A大的帮助他的查询查询相当复杂,可能有其他表达逻辑的方法。