1.定义

索引:一种数据结构,典型的是B-树,有键值对,键对应属性的某个值,值对应该键的存放位置。

建立索引的目的:加快查询速度

比如:

SELECT *
FROM Movies
WHERE studioName = 'Disney' AND year = 1990;

如果有studioName上的索引,则不需要搜索Movies中所有的元组,只要根据索引直接取出studioName = 'Disney' 的元组,再判断year值是否符合条件即可。

2.声明

CREATE INDEX 索引名 ON 表名(属性名)

CREATE INDEX YearIndex ON Movies(year);

多属性索引

CREATE INDEX KeyIndex ON Movies(title, year);

多属性索引的属性顺序是有意义的,代表了索引的建立层次。如上面例子中,先是title再是year,则先在title上建立索引,可以找到指定的title集合,再在该集合上建立year的索引。

查询较多的属性应该放在前面。

删除索引:

DROP INDEX 索引名

3.索引的选择

建立索引并不一定能够加快查询的速度。

如果更新操作多,则在更新时需要更新索引,导致大量的操作。

数据库操作时,主要的时间都消耗在磁盘页面读取上。

两种数据存储的方式:

1.不是属性聚集的:同一个属性上相同的值随机存储在磁盘上,这样每取出一个目标元组都要读取一个磁盘页面。如果建立的索引中,查询出来的元组有很多个,则索引并没有多大的优势。

2.是属性聚集的:如果元组在建立索引的属性上聚集,则大量的目标元组都在一个磁盘页面上,采用索引可以大大加快查询速度。

如果不是属性聚集的,则在目标元组比较少时,索引才会节约时间。

采用索引时时间的消耗:

1.查询时:载入索引的磁盘页面,载入索引相应键值对中给出的磁盘页面

2.更新时:载入数据磁盘页面,写入数据磁盘页面,载入索引磁盘页面,写入索引磁盘页面

索引自动选择:

有很多数据库工具用于自动分析选择较好的候选索引。采用贪心法。每次选择一个能够带来正面收益的属性简历索引,之后继续评估剩下的属性。

最新文章

  1. php随机ip
  2. 实现ApplicationContextAware接口时,获取ApplicationContext为null
  3. nginx Windows服务形式运行
  4. XAF去掉View页面的编辑器
  5. IntelliJ IDEA 12 与 Tomcat 集成并运行Web项目
  6. httplib,urllib和urllib2
  7. Linux开机自启动
  8. 大数据时代之hadoop(三):hadoop数据流(生命周期)
  9. windos环境apache+mysql+php+Discuz的安装配置
  10. [笔记]ACM笔记 - 组合数
  11. HTTP协议中PUT和POST使用区别
  12. Jenkins的关闭、重启
  13. Chapter 5 Blood Type——17
  14. OpenCV中Mat总结
  15. 基于fpga的vga学习(1)
  16. python学习之高阶函数
  17. Unity特殊路径
  18. php自动生成mysql的触发代码。
  19. 【二分】【线段树】hdu6070 Dirt Ratio
  20. 有用的Java注解

热门文章

  1. Elasticsearch 监控和部署
  2. 福大软工1816:Alpha(1/10)
  3. Isolate-user-vlan技术白皮书
  4. 从零开始配置Jenkins(三)——用户权限管理
  5. SQL 视图 局部变量 全局变量 条件语句 事务 触发器
  6. chrome & dark theme
  7. Delphi xe7组件和控件的安装方法
  8. servletContex.getRealPath 获取的是拼接后的地址 是虚假的
  9. BEGIN TRAN;
  10. HTML5用canvas绘制五星红旗