zoukankan      html  css  js  c++  java
  • 数据库索引学习

    参考:https://www.cnblogs.com/aspwebchh/p/6652855.html

    对于mysql而言,常用的是innodb和myisam引擎,只有innodb有聚集索引

    1、聚集索引

      一般是主键,可以自己指定。一个表只能有聚集索引,它的特点是索引的排列顺序和表记录的排列顺序相同。这区别于非聚集索引。

      当表没有建立聚集索引时,表数据的无序的排列在磁盘上。创建聚集索引后,表数据向二叉树一样分布在磁盘上。

      

      除了最底层数据,其他节点都是聚集索引,当sql通过聚集索引查询时,他们会先通过上面的节点快速定位到数据具体的位置,再查询信息。

    2、非聚集索引

      就是我们经常自己创建的索引了,非聚集索引可以创建多个。当我们再某个字段创建索引时,该字段会被复制一份用来生成索引。当sql通过该索引查询时,会先在索引查询到数据的聚集索引,在通过聚集索引查询到具体的数据。除了覆盖索引外,其他的索引查询都会用到聚集索引。

    截图一张咕泡的公开课的图(侵删)

    3、优缺点

      优点很明显了,查询快。但是缺点也显而易见:

      1、每次给字段建一个新索引, 字段中的数据就会被复制一份出来, 用于生成索引。 因此, 给表添加索引,会增加表的体积, 占用磁盘存储空间。

      2、每次增删改数据都会改变各节点中的索引数据内容,破坏树结构, 因此,在每次数据改变时, 数据库必须去重新梳理树(索引)的结构以确保它的正确,这会带来不小的性能开销。

    4.设计索引

      (单字段索引,多字段索引相同)最左原则,离散型高原则,宽带小原则

    5.覆盖索引

      如果需要查询的字段就是索引字段,则查询的适合,可以直接从索引出获取数据,不需要查询具体的数据,减少io

  • 相关阅读:
    ExtJS 4布局
    ExrJS4学习笔记1 类
    Jquery实现动态添加按钮
    ExtJs 4 MVC
    读取目录下所有目录和文件加载到TreeView
    利用List的Sort()、Find()、FindAll()、Exist()來解決一些問題
    html常用
    ExtJs3.3 TreePanel,checked节点和平常节点同时存在
    sql server 常用查询
    美女时钟网页代码
  • 原文地址:https://www.cnblogs.com/jaxlove-it/p/9272733.html
Copyright © 2011-2022 走看看