我在产品表 搜索 几个区域的数据 而且只要前一千条
例如语句:
SELECT TOP 1000 * FROM Provide WHERE AreaID IN( 1, 2, 3)几个区域还好 多了就特别慢 因为 产品表里数据特别多 有几百万条
SELECT TOP 1000 * FROM Provide WHERE AreaID IN( 1, 2, 3, 4, 5, 6, 7 ,8 ,9, 10 ……) 超级慢大家有什么办法没解决下 查询速度的问题 而且是不管多少区域 只要记录满1000条就好了 后面的就不用查询了

解决方案 »

  1.   

    AreaID有索引吗
    先插入到临时表 在join试一下
      

  2.   

    直接select top 1000* from Provide 就行了呗
    干嘛要写成这样 SELECT TOP 1000 * FROM Provide WHERE AreaID IN( 1, 2, 3, 4, 5, 6, 7 ,8 ,9, 10 ……1000)??? 
      

  3.   


    IN  里面的数据也是查出来的
    我需要 指定区域的 数据 所以要IN 
      

  4.   

    你先把 ( 1, 2, 3, 4, 5, 6, 7 ,8 
    插入到临时表 #temp 
    在 
    SELECT TOP 1000 * 
    FROM Provide
    join #temp T On Provide.AreaID =T.AreaID 
    这样试一下 in的效率不是很高
      

  5.   

    参考
    方案跟楼上的差不多 就是join代替in
      

  6.   

    SELECT *
    FROM Tb
    WHERE EXISTS 
        (SELECT * 
        FROM tb
        WHERE 条件) 
    建索引主键,分区
      

  7.   

    SELECT * FROM Provide WHERE AreaID = 1
    Union
    SELECT * FROM Provide WHERE AreaID = 2
    Union
    SELECT * FROM Provide WHERE AreaID = 5
    ......
      

  8.   

    要是SQL语句不能优化,就让数据缓存