zoukankan      html  css  js  c++  java
  • 13、Mysql索引

    1、什么是索引

    索引是一种帮助mysql提高查询效率数据结构

    2、索引的优缺点

    优点:大大加快数据查询速度

    缺点:

    (1)维护索引需要消耗数据库资源

    (2)索引需要占用磁盘空间

    (3)当对标进行增删改时,需要维护索引,速度会受到影响

    3、索引的分类

    -InnoDB: 

    (1)主键索引(自动创建)--主键索引属于聚簇索引

    设定为主键后数据库会自动建立索引,逐渐索引的列值不能为空

    (2)唯一索引

    索引列的值必须唯一,但允许有空值,且只能存在一个null

    (3)单值索引(普通索引)

    一个索引只包含单个列,一个表可以有多个单列索引

    (4)复合索引

    一个索引包含多个列

    -MyISAM

    (5)Full Text 全文索引

    全文索引类型为Full Text,在定义索引的列上支持全文查找,允许这些索引列中插入重复值和空值。全文索引可以在char、varchar、text类型列上创建

    4、索引的基本操作

    (1)主键索引(在创建表时自动创建)

    1 create table user (id varchar(20) primary key, name varchar(20));
    2 show index from user;    # 查看索引

    (2)唯一索引

    1 # 创建表时添加唯一索引
    2 create table user(id varchar(20) primary key, name varchar(20),unique(name));
    3 
    4 
    5 # 创建表后添加唯一索引
    6 create table user(id varchar(20) primary key, name varchar(20));
    7 create unique index name_index on user(name);

    (3)单值索引(或普通索引)

     1 # 创建表时添加单值索引
     2 create table user(id varchar(20) primary key, name varchar(20),key(name)); 
     3 
     4 
     5 # 创建表后添加单值索引
     6 create table user(id varchar(20) primary key, name varchar(20));
     7 create index name_index on user(name);
     8 
     9 # 删除索引
    10 drop index name_index on user;

    (4)符合索引

    1 # 创建表时添加复合索引
    2 create table user(id varchar(20) primary key, name varchar(20), age int, key(name,age)); 
    3 
    4 
    5 # 创建表后添加复合索引
    6 create table user(id varchar(20) primary key, name varchar(20), age int);
    7 create index name_age_index on user(name,age);

    【经典面试题】

    复合索引:name  age birth

    判断下列组合能否利用索引

    name birth age 能

    name age birth 能

    age birth 否

    birth age name 能

    age birth 否

    【解析】

    判断能否利用索引的原则是:

    (1)最左前缀原则

    (2)mysql为了更好的利用索引,在查询过程中会动态的调整查询字段的顺序以便可以利用索引。

    5、索引底层原理解析

    (1)当我们向数据库中的插入一组数据时(主键无序插入的),Mysql数据库在为主键自动创建索引时,会基于主键对数据进行排序(这也很好的回答了乱序插入数据,但是查询的数据却是有序的);

    (2)排序后会将这些数据以链表的形式进行存储;(查询的时间复杂度为O(n))

    (3)为了提高查询效率,Mysql索引又进行了优化,采用B+树这种数据结构进行存储,即基于页的形式进行管理索引,页的默认大小为16KB;

    (4)站在整个B+树的存储结构上讲,一个3层的B+树可以存储的数据量在8~10亿左右。

    6、聚簇索引和非聚簇索引

    聚簇索引:将数据存储与索引放到一块,索引结构的叶子结点保存了行数据

    非聚簇索引:将数据与索引分开存储,索引结构的叶子节点指向了数据对应的位置

  • 相关阅读:
    PHP
    单引号和双引号的区别和效率问题
    SFDC 401认证准备及考试
    SFDC 401 最新考试真题
    3 report formats of SFDC
    HTML输入框点击内容消失
    RDD的转换操作(续)
    RDD的转换操作
    SparkContext和RDD的说明
    集群模式相关概念
  • 原文地址:https://www.cnblogs.com/yif930916/p/15033974.html
Copyright © 2011-2022 走看看