理解SQL Server中的索引(一)
对于很多DBA和程序员来说,SQL Server中的索引不是一个陌生的事物,我们甚至每天都在使用它,对于哪些情况下应该创建索引都能一一的道出,不过有可能我们并没有仔细去想它的具体原理,本文将根据我对SQL Server中的索引的理解做一个简单的总结和概述,希望对大家能有所帮助(详细可参考《SQL Server 2005 Implementation and Maintenance》 )。
一,索引的作用
在SQL Server数据库中,当我们需要在大批量比如几亿条数据库中检索或者修改数据的时候,索引能够帮我们快速的找到目标数据。就如同我们要在字典中查找一个字的详细解释,如果没有索引,那么我们只有一页一页的查找,这样的速度是特别的慢的,当有了索引,我们可以快速的跳转到包含这个字的页,这样就大大的节省了时间。
二,SQL Server中创建索引的结构B-Tree/Banlanced Tree(B树)
我们思考一个问题,即便一本字典有索引是不是一定就能提高查阅速度呢?假如我们按照一个个字的在索引中找下去,那么几十万个字组成的索引也会花掉我们很长的时间;而现实生活告诉我们,一般我们的索引也是按照一定规律组成的,比如新华字典有按照生母排序的索引,也有按照笔画排序的索引,这样我们就能更快速的查阅,而不必要在索引中挨个字找下去。这里就要谈到B-Tree了,B-Tree也有类似的原理。
如下是B-Tree的示意图
如上图B-Tree中只有一个根节点,这个根节点只包含一个数据页(data page);包含0个或者多个中间层,同时一个叶级。
在叶级的数据页中存储了创建索引的数据的相关信息(排序的);而每个叶级页所包含的索引行则要根据创建索引的列的数据类型来决定。
而中间层是将每个叶级页上的第一个输入索引值都存储在一个数据页上,并且存储对应叶级页的指针。而根节点存储的方式与此类似,存储的是每个中间层的第一个输入以及对应的指针。
三、索引查找数据的实例
下面参考这个实例
如果我们查找 “Man”这个单词,那么首先从根节点查找 这个时候值H和O都会被查找出来,由于L在O之前,所以这个时候会去 中间层级的H页查找 这个时候值L会被查找出来,然后在叶级页L查找到M。这样我们就仅查找了三个页,如果我们按照顺序查找,在上图中则需要查找5个页,在数据量很大的情况下优势会更明显。
三、关于索引的级
我们知道在SQL Server中 一个数据页的大小是8192字节,用户最多只能存储 8060字节的数据。假如我们在一个char(60)的列上创建索引,在数据表中每一行则需要60字节的存储,同
相关文档:
一、分页写法小例:
SELECT FIRST 10 templateid,code,name from template ;
SELECT FIRST 10 SKIP 10 templateid,code,name from template ;
SELECT * from shop ROWS 1 TO 10; –firebird2.0支持这种写法
二、显示表名和表结构
SHOW TABLES;
SHOW TABLE tablename;
四、更新字段注释
......
sql之left join、right join、inner join的区别
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行
举例如下:
-------------------------------------------- ......
如果你使用的是 SQL Server 2008, 当你修改数据结构后,保存时会报下图情况: Saving changes is not permitted. The changes you have made require the following tables to be dropped and re-created. You have either made changes to a table that can't be re-created or enabled the option Prevent saving cha ......
怎样从数据库里随机读取
一条记录,
SELECT TOP 1 * from dbo.Customers ORDER BY NEWID()
这样,如果是随机10
条,100条。。。。
SELECT TOP 10 * from dbo.Customers ORDER BY NEWID()
很简单吧。
不过top后面数字越大,运行速度越慢。不推荐数据字太大。
以后代码在SQL2000 ......
接上篇
四,根据条件有选择的UPDATE。
例,有如下更新条件
工资5000以上的职员,工资减少10%
工资在2000到4600之间的职员,工资增加15%
很容易考虑的是选择执行两次UPDATE语句,如下所示
--条件1
UPDATE Personnel
SET salary = salary * 0.9
WHERE salary >= 5000;
--条件2
UPDATE Personnel
SET sala ......