• λ我爱Aspx >> Asp.Net >> 常用SQL书写技巧
  • 常用SQL书写技巧

  • :未知  Դ:非寒日志  :2007-4-21 0:45:55  ؼ:sql
  • 9、 组合索引的高效使用

    假设已在date,place,amount三个字段上建立了组合索引

    select count(*) from record

    where date > ′19991201′ and date < ′19991214′ and amount > 2000

    (< 1秒)

    select date,sum(amount) from record group by date

    (11秒)

    select count(*) from record

    where date > ′19990901′ and place in (′BJ′,′SH′)

    (< 1秒)

    这是一个设置较合理的组合索引。它将date作为前导列,使每个SQL都可以利用索引,并且在第一和第三个SQL中形成了索引覆盖,因而性能达到了最优。如果索引不便于更改,修正SQL中的条件顺序以配合索引顺序也是可行的。

    10、 order by按聚集索引列排序效率最高

    排序是较耗时的操作,应尽量简化或避免对大型表进行排序,如缩小排序的列的范围,只在有索引的列上排序等等。

    我们来看:(gid是主键,fariqi是聚合索引列)

    select top 10000 gid,fariqi,reader,title from tgongwen

    用时:196 毫秒。 扫描计数 1,逻辑读 289 次,物理读 1 次,预读 1527 次。

    select top 10000 gid,fariqi,reader,title from tgongwen order by gid asc

    用时:4720毫秒。 扫描计数 1,逻辑读 41956 次,物理读 0 次,预读 1287 次。

    select top 10000 gid,fariqi,reader,title from tgongwen order by gid desc

    用时:4736毫秒。 扫描计数 1,逻辑读 55350 次,物理读 10 次,预读 775 次。

    select top 10000 gid,fariqi,reader,title from tgongwen order by fariqi asc

    用时:173毫秒。 扫描计数 1,逻辑读 290 次,物理读 0 次,预读 0 次。

    select top 10000 gid,fariqi,reader,title from tgongwen order by fariqi desc

    用时:156毫秒。 扫描计数 1,逻辑读 289 次,物理读 0 次,预读 0 次。

    从以上我们可以看出,不排序的速度以及逻辑读次数都是和“order by 聚集索引列” 的速度是相当的,但这些都比“order by 非聚集索引列”的查询速度是快得多的。

    同时,按照某个字段进行排序的时候,无论是正序还是倒序,速度是基本相当的。

    三、 关于节省数据查询系统开销方面的措施

    Ҷƪл˵?
  • һƪ多个页面向同一目标页面PostBack的问题
    һƪ常用CHM帮助文档集锦下载