none
海量数据 分页 及 模糊查询问题 RRS feed

  • 问题

  • 我有张表有1百万以上的数据 改建索引的字段我都建索引了:
    1、现在我想对该表进行
    分页,我发现50万以下的数据速度还可以,50万以上就很慢了。
    select  top  10 
    *   from books      
    where  id > (select  isnull(max(id),0)  from (select  top  500000 id   from books order  by id)  as  T )  order by id   .
    这里 想请问有没有有过这方面经验的来说说一般的解决办法 。
    2、就是我想对本表进行模糊查询,
    可是我的数据量太大了,
    用 like 、关键字%’ 这/样速度太慢了。要查一分多钟呢。 想请问下
    2010年5月3日 23:17

答案

全部回复

  • ID 是PK<Clustered>么,若是,则再单独对ID建索引,再测试一下
    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com
    2010年5月4日 1:02
  • 有没有表结构啊。

    如果真的和你说的一样。该建的索引都建了,估计是你表结构过大。导致IO存在问题。

    建议你竖直分区。

    关于like也是一样。 如果你是后模糊,肯定你的表结构存在问题。

    如果一个表只有ID和字符串两列的话,100万左右的数据在30秒左右就可以搞定。(双核、2g内存)

    如果你认为速度还不理想,那就用全文索引。

    2010年5月4日 1:12
  • 100w数据不算多

    1.你的分页查询sql有问题。哪有这么写的。既然要max干嘛还要order by?

    2.如果使用like慢,可以考虑使用全文索引。

     


    family as water
    2010年5月4日 1:26
  • 对于分页, 如果依据仅仅是 id, 没有选择性的查询条件, 那么无论 id 应该有独立的索引.

    模糊查询这个没有什么办法, 全文索引也不并见得会快多少.

    2010年5月4日 4:38
  • Hi,

    在我们的一个类似的表上试了一下你的查询,6 GB大小, 7百万行的表,第一次4秒就查出来了(4GB memory, HP G4)。数据量应该不是问题,注意看看索引结构。
    2010年5月4日 16:34
  • 恩 我也试了 ,我的这个分页语句比 select top 10 * from
    bigbooks
    where id not in (
     select top 2999995 id from bigbooks order by id
    )
    order by id这种语句效率要高很多 。那  like ‘%关键字%’ 这种 可优化么?

    2010年5月5日 22:01
  •  like ‘%关键字%’ 通常无法利用索引,没有什么优化的余地

     


    family as water
    2010年5月6日 0:40