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

  • :未知  Դ:非寒日志  :2007-4-21 0:45:55  ؼ:sql
  • SQL结构化查询字符串的改写,是实现数据库查询性能提升的最现实、最有效的手段,有时甚至是唯一的手段,比如在不允许大幅度修改现有数据库结构的情况下。

    通过优化SQL语句提高查询性能的关键是:

     根据实际需求情况,建立合适的索引;

     使用一切可能的方式去利用好索引,避免全表扫描;

     尽量减少内存及数据I/O方面的开销

    一、 建立索引

    (一)建立“适当”的索引,是快速查询的基础。

    索引(index)是除表之外另一重要的、用户定义的存储在物理介质上的数据结构。当根据索引码的值搜索数据时,索引提供了对数据的快速访问。事实上,没有索引,数据库也能根据Select语句成功地检索到结果,但随着表变得越来越大,使用“适当”的索引的效果就越来越明显。注意,在这句话中,我们用了“适当”这个词,这是因为,如果使用索引时不认真考虑其实现过程,索引既可以提高也会破坏数据库的工作性能。

    索引实际上是一种特殊的目录,SQL SERVER提供了两种索引:

     聚集索引(clustered index,也称聚类索引、簇集索引)

    我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。

    例如:

    汉语字典中按拼音查某一个字,就是使用“聚集索引”,实际上,你根本用不着查目录,直接在字典正文里找,就能很快找到需要的汉字(假设你知道发音)。

     非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)

    我们把目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。

    例如:

    汉语字典中按部首查某一个字,部首目录和正文一定要刻意的通过页码才能联系到一起,其顺序不是天然一致的。

    聚集索引与非聚集索引的最大区别就在于:聚集索引是对原数据表进行排序,因此只要符合索引条件,就能够直接连续的读取数据记录,几乎可以达到对数据表的零扫描;而非聚集索引仅仅只是另外建了一张索引表,取数据的时候,从索引表取得结果后,还需要到指针所指的数据行读取相应数据,因此,在性能上,聚集索引会大大优于非聚集索引。

    但是在一张表中,聚集索引只允许一个,是比较宝贵的,因此要尽可能的用于那些使用频率最高的索引上。 另外,查询时必需要用到索引的起始列,否则索引无效。另外,起始列也必需是使用频繁的列,那样的索引性能才会达到最优化。

    (二)表:何时应使用聚集索引或非聚集索引

    动作描述 使用聚集索引 使用非聚集索引

    列经常被分组排序 ○ ○

    返回某范围内的数据 ○

    一个或极少不同值

    小数目的不同值 ○

    大数目的不同值 ○

    频繁更新的列 ○

    外键列 ○ ○

    主键列 ○ ○

    频繁修改索引列 ○

    (三)索引建立的一些注意项

    1、不要把聚集索引浪费在主键上,除非你只按主键查询

    虽然SQL SERVER默认是在主键上建立聚集索引的,但实际应用中,这样做比较浪费。通常,我们会在每个表中都建立一个ID列,以区分每条数据,并且这个ID列是自动增大的,步长一般为1。此时,如果我们将这个列设为主键,SQL SERVER会将此列默认为聚集索引。这样做有好处,就是可以让您的数据在数据库中按照ID进行物理排序,但这样做实用价值不大。

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