zoukankan      html  css  js  c++  java
  • 【SQL】索引

    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.更新时:载入数据磁盘页面,写入数据磁盘页面,载入索引磁盘页面,写入索引磁盘页面

     索引自动选择:

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

  • 相关阅读:
    maven下载源配置
    nvm及node下载源配置
    SourceInsight 添加Symbol Lookup路径
    8.31-使用vscode进行c/c++程序设计
    10.08-vscode-plantuml建模
    6.26-vscode 配置文件
    3.5-VSCode 学习
    3.6-WizNote 常用快捷键
    10.04-CTEST-GTest
    180325-log4cplus
  • 原文地址:https://www.cnblogs.com/dplearning/p/4888095.html
Copyright © 2011-2022 走看看