我爱Aspx >> Asp.Net >> 常用SQL书写技巧SQL结构化查询字符串的改写,是实现数据库查询性能提升的最现实、最有效的手段,有时甚至是唯一的手段,比如在不允许大幅度修改现有数据库结构的情况下。
通过优化SQL语句提高查询性能的关键是:
 根据实际需求情况,建立合适的索引;
 使用一切可能的方式去利用好索引,避免全表扫描;
 尽量减少内存及数据I/O方面的开销
一、 建立索引
(一)建立“适当”的索引,是快速查询的基础。
索引(index)是除表之外另一重要的、用户定义的存储在物理介质上的数据结构。当根据索引码的值搜索数据时,索引提供了对数据的快速访问。事实上,没有索引,数据库也能根据Select语句成功地检索到结果,但随着表变得越来越大,使用“适当”的索引的效果就越来越明显。注意,在这句话中,我们用了“适当”这个词,这是因为,如果使用索引时不认真考虑其实现过程,索引既可以提高也会破坏数据库的工作性能。
索引实际上是一种特殊的目录,SQL SERVER提供了两种索引:
 聚集索引(clustered index,也称聚类索引、簇集索引)
我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。
例如:
汉语字典中按拼音查某一个字,就是使用“聚集索引”,实际上,你根本用不着查目录,直接在字典正文里找,就能很快找到需要的汉字(假设你知道发音)。
 非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)
我们把目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。
例如:
汉语字典中按部首查某一个字,部首目录和正文一定要刻意的通过页码才能联系到一起,其顺序不是天然一致的。
聚集索引与非聚集索引的最大区别就在于:聚集索引是对原数据表进行排序,因此只要符合索引条件,就能够直接连续的读取数据记录,几乎可以达到对数据表的零扫描;而非聚集索引仅仅只是另外建了一张索引表,取数据的时候,从索引表取得结果后,还需要到指针所指的数据行读取相应数据,因此,在性能上,聚集索引会大大优于非聚集索引。
但是在一张表中,聚集索引只允许一个,是比较宝贵的,因此要尽可能的用于那些使用频率最高的索引上。 另外,查询时必需要用到索引的起始列,否则索引无效。另外,起始列也必需是使用频繁的列,那样的索引性能才会达到最优化。
(二)表:何时应使用聚集索引或非聚集索引
动作描述 使用聚集索引 使用非聚集索引
列经常被分组排序 ○ ○
返回某范围内的数据 ○
一个或极少不同值
小数目的不同值 ○
大数目的不同值 ○
频繁更新的列 ○
外键列 ○ ○
主键列 ○ ○
频繁修改索引列 ○
(三)索引建立的一些注意项
1、不要把聚集索引浪费在主键上,除非你只按主键查询
虽然SQL SERVER默认是在主键上建立聚集索引的,但实际应用中,这样做比较浪费。通常,我们会在每个表中都建立一个ID列,以区分每条数据,并且这个ID列是自动增大的,步长一般为1。此时,如果我们将这个列设为主键,SQL SERVER会将此列默认为聚集索引。这样做有好处,就是可以让您的数据在数据库中按照ID进行物理排序,但这样做实用价值不大。
Ҷƪл˵?
从应用程序观SQL Server和Oracle..[03-18]
Sqlite数据库在Media NAS系统的应..[03-18]
数据库系统优化,高性能sql语句[03-18]
在SQL Server中用XQuery分解XML数..[03-18]
Microsoft SQL Server 2005 Serv..[03-18]
在C#中建立复杂的、灵活的SQL查询..[03-17]
在C#中建立复杂的、灵活的SQL查询..[03-16]
常用CHM帮助文档集锦下载[04-21]
数据分页显示方案[04-21]
ASP.NET 2.0 正式版中无刷新页面..[04-21]
c#学习体会:使用 ref 和 out 传递..[04-21]
c#中使用ref和out一点认识[04-21]
Ajax在.NET中与Server控件的交互[04-21]
5色六彩教了我一招[04-21]
见证七夕-愿天下有情人·终成眷属[04-21]
体验ASP.NET 2.0新特性[04-21]
FCKeditor.net[04-21]