热门关键字: jsp web pl/sql pl webwor   →开发工具  操作系统
当前位置 : 无忧IT编程网 > 数据库开发 > SQL Server > 正文

常用SQL语句书写技巧

来源:转载作者:无忧时间:08-01-24
    SQL结构化查询字符串的改写,是实现数据库查询性能提升的最现实、最有效的手段,有时甚至是唯一的手段,比如在不允许大幅度修改现有数据库结构的情况下。
通过优化SQL语句提高查询性能的关键是:
 根据实际需求情况,建立合适的索引;
 使用一切可能的方式去利用好索引,避免全表扫描;
 尽量减少内存及数据I/O方面的开销

    一、 建立索引
(一)建立“适当”的索引,是快速查询的基础。
索引(index)是除表之外另一重要的、用户定义的存储在物理介质上的数据结构。当根据索引码的值搜索数据时,索引提供了对数据的快速访问。事实上,没有索引,数据库也能根据SELECT语句成功地检索到结果,但随着表变得越来越大,使用“适当”的索引的效果就越来越明显。注意,在这句话中,我们用了“适当”这个词,这是因为,如果使用索引时不认真考虑其实现过程,索引既可以提高也会破坏数据库的工作性能。
索引实际上是一种特殊的目录,SQL SERVER提供了两种索引:
 聚集索引(clustered index,也称聚类索引、簇集索引)
我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。
例如:
汉语字典中按拼音查某一个字,就是使用“聚集索引”,实际上,你根本用不着查目录,直接在字典正文里找,就能很快找到需要的汉字(假设你知道发音)。
 非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)
我们把目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。
例如:
汉语字典中按部首查某一个字,部首目录和正文一定要刻意的通过页码才能联系到一起,其顺序不是天然一致的。

聚集索引与非聚集索引的最大区别就在于:聚集索引是对原数据表进行排序,因此只要符合索引条件,就能够直接连续的读取数据记录,几乎可以达到对数据表的零扫描;而非聚集索引仅仅只是另外建了一张索引表,取数据的时候,从索引表取得结果后,还需要到指针所指的数据行读取相应数据,因此,在性能上,聚集索引会大大优于非聚集索引。
  但是在一张表中,聚集索引只允许一个,是比较宝贵的,因此要尽可能的用于那些使用频率最高的索引上。 另外,查询时必需要用到索引的起始列,否则索引无效。另外,起始列也必需是使用频繁的列,那样的索引性能才会达到最优化。

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

动作描述 使用聚集索引 使用非聚集索引
列经常被分组排序 ○ ○
返回某范围内的数据 ○ 
一个或极少不同值 
小数目的不同值 ○ 
大数目的不同值 ○
频繁更新的列 ○
外键列 ○ ○
主键列 ○ ○
频繁修改索引列 ○

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

                  

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 验证码: 验证码
查看所有评论
相关文章
站长推荐