我有一张表叫city_text,里面有两个属性locale和city_name,我现在要找出所有city_name有相同的记录,我是这么写SQL语句的:
select * from city_text as city1 where city1.locale='en_US' and city1.city_name in (select city2.city_name from city_text as city2 where city2.locale='en_US' group by city2.city_name having count(city2.city_name) > 1)
我的数据库中大概有30000条记录,执行起来速度非常非常慢,10分钟了也出不来结果。后来我在city_name上加了索引,还是不起作用,请高人帮忙想一下这个问题,谢谢!!

解决方案 »

  1.   

    select * from city_text as city1 inner join
    (select city2.city_name from city_text as city2 where city2.locale='en_US' group by city2.city_name having count(city2.city_name) > 1) b
    on city1.city_name=b.city_name
    where city1.locale='en_US'  
      

  2.   

    用内连接!我怎么没想到~~~非常感谢。但是,您能帮我分析一下为什么我的SQL或很慢吗?
    是不是因为外层select每检查一个记录是否in的时候,都会执行一遍内层select?还是别的原因?