MSSql Server基础学习系列———索引
2015-09-16 21:57
218 查看
MSSql Server 对于那些未建立索引的表格数据的检索是从第一行开始,从上往下,一条一条的检索。如果我们程序中经常要用到查询操作,而且数据库中的数据量很庞大,毫无疑问,每次的数据查询都会比较浪费时间。
大家小时候学语文的时候应该都用过新华字典,回想一下我们查找某个汉字的时候是怎么做的呢?我们应该都会先查找字典前面的目录,然后根据目录指示的页数进行汉字查询,这大大节约了我们的查询效率。试想一下,如果没有这个目录,查询一个我们不认识的汉字该是多么可怕的一件事情啊。微软当然也为我们的查询提供了优化操作。MSSql Server数据库中的索引就相当于对我们的数据创建了一个目录,有了目录查找数据时就会更快了。
建立索引固然提高了我们的查询效率,可也带来了一些弊端
(1)空间成本的消耗
我们需要在数据库中建立所以,固然就需要一些空间来保存这些索引,舍空间求时间。
(2)可能会降低删修的时间(性能)。
数据库中为某个表格建立索引之后,数据库中的数据就已经进行了排序。如果我们想插入一条数据,而这条数据根据建立的索引原则应该插入到表格的中间位置,那为了维持这个索引,在这个新插入数据之后的所有数据都需要向后移动,如果数据量很大,这也是比较耗性能的。同样是删除操作。
索引分为两类:
聚集索引:数据在索引中的顺序与数据的物理顺序一致.(如字典中的音序查字法)
非聚集索引:数据在索引中的顺序与数据的物理顺序不一致.(如部首查字法)
一旦一个表创建了一个主键,那么也就创建了一个聚集索引。
非聚集索引建立:
选择某个表格->设计->选择某一列->右键 索引/键->左边区域点击添加->选择需要建立非聚集索引的列以及排序规则、是否唯一
建索引的原则:
1) where 后经常搜索的列
2) 不经常改变的列
3) 数据差别要大(如性别列,就不要建索引了)
大家小时候学语文的时候应该都用过新华字典,回想一下我们查找某个汉字的时候是怎么做的呢?我们应该都会先查找字典前面的目录,然后根据目录指示的页数进行汉字查询,这大大节约了我们的查询效率。试想一下,如果没有这个目录,查询一个我们不认识的汉字该是多么可怕的一件事情啊。微软当然也为我们的查询提供了优化操作。MSSql Server数据库中的索引就相当于对我们的数据创建了一个目录,有了目录查找数据时就会更快了。
建立索引固然提高了我们的查询效率,可也带来了一些弊端
(1)空间成本的消耗
我们需要在数据库中建立所以,固然就需要一些空间来保存这些索引,舍空间求时间。
(2)可能会降低删修的时间(性能)。
数据库中为某个表格建立索引之后,数据库中的数据就已经进行了排序。如果我们想插入一条数据,而这条数据根据建立的索引原则应该插入到表格的中间位置,那为了维持这个索引,在这个新插入数据之后的所有数据都需要向后移动,如果数据量很大,这也是比较耗性能的。同样是删除操作。
索引分为两类:
聚集索引:数据在索引中的顺序与数据的物理顺序一致.(如字典中的音序查字法)
非聚集索引:数据在索引中的顺序与数据的物理顺序不一致.(如部首查字法)
一旦一个表创建了一个主键,那么也就创建了一个聚集索引。
非聚集索引建立:
选择某个表格->设计->选择某一列->右键 索引/键->左边区域点击添加->选择需要建立非聚集索引的列以及排序规则、是否唯一
建索引的原则:
1) where 后经常搜索的列
2) 不经常改变的列
3) 数据差别要大(如性别列,就不要建索引了)
相关文章推荐
- SQLServer将数据导出成CSV格式
- oracle11G手动建库
- SQL数据库端口打开
- 基于SSL加密的MySQL主主复制
- MySQL 备份与恢复
- mysql 索引基数
- ubuntu14.04安装mysql
- SQLAlchemy (一)---创建表、插入数据、查询
- JDBC连接数据库流程
- SQLite3使用方法大全(一)之常用命令
- 【Redis】Redis学习笔记01_Linux下Redis的安装
- liunx下mysql数据库使用之三范式,关系模型设计注意项,安装目录结构
- ios超精细论证数据库管理基础
- ios数据库常用sql语句
- Oracle学习之常见问题处理
- zzMySQL入门
- MySQL(12):windows下解决mysql忘记密码
- iOS数据库常用sql语句
- mysql sleep连接过多解决方法
- 系统密码修改,SQLServer启动失败