背景大概如下:一个大概有12万数据量的表data,里面有id(ID主键),companyname(公司名字),addr(公司地址),site(网址)4个字段,其中公司名字有重复的(公司名字重复的时候,地址不一定重复)。
现在要求查询公司名字相同的记录。
我自己在这里做了一个自连接查询,sql如下(mysql版本低,不支持exists):
SELECT DISTINCT a.* FROM data a,data b 
WHERE a.companyname=b.companyname AND a.id<>b.id and a.sitename IN (".$site.") ORDER BY companyname DESC
上面的(".$site.") 我都是直接写入值测试,比如:
SELECT DISTINCT a.* FROM data a,data b 
WHERE a.companyname=b.companyname AND a.id<>b.id and a.sitename IN ('耐克','阿迪阿斯') ORDER BY companyname DESC上面的语句执行的时候效率好低,超时。请问我该如何建立索引或优化sql,谢谢

解决方案 »

  1.   

    不明白你的sql语句是想干嘛.去掉distinct.
      

  2.   

    select a.* from data a where a.sitename iN ('耐克','阿迪阿斯') ORDER BY companyname DESC 
      

  3.   


    SELECT a.* FROM data a left join (select companyname from data group by companyname having count(*) > 1) b
    on a.companyname = b.companyname 
    WHERE a.sitename IN (".$site.") ORDER BY a.companyname DESC 建议在companyname上加索引