美文网首页
Mysql高级(三) 索引概述

Mysql高级(三) 索引概述

作者: 卡戎li | 来源:发表于2020-05-02 22:58 被阅读0次

一、索引定义

索引(Index)是帮助Mysql高效获取数据等数据结构。

索引是排好序的快速查找数据结构,故影响sql执行中的查找和排序。

二、索引的优势和劣势

2.1 索引优势

索引大幅度提高了查询效率,降低了数据库的IO成本。降低了数据排序成本,降低了CPU的消耗。

2.2 索引劣势

因为索引是一个独立的表,里面存了主键与索引字段,并且指向实体表的记录,所以也是占空间的。并且虽然有了所以之后查询速度快,但是对相应数据更新(insert、update、delete)的速度变慢了,所以对于那些经常需要更新的数据表尽量不要加索引。

三、索引分类

3.1 单值索引

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

3.2 唯一索引

索引列的值必须唯一,单允许空值

3.3 复合索引

一个索引包含多个列

  • 主键是一种特殊的唯一索引

3.4 全文索引

这是一种特殊类型的索引,它查找的是文本中的关键词,而不是直接比较索引中的值,全文索引更类似于搜索引擎做的事情,实际生产中我们一般不会使用MySQL来做类似搜索引擎的工作

3.5 聚簇索引

聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据

聚集索引(InnerDB):
1、建表的时候,如果指定了主键,则主键就是聚簇索引。
2、建表的时候,如果没有指定主键,且含有唯一索引,则会选择一个唯一的非空索引作为聚簇索引。
3、如果即不含有主键,也不含有唯一索引,则隐式使用6个字节的rowId作为聚簇索引。

四、索引的基本操作

  • 查看索引

show index from tblname;

  • 直接创建索引

CREATE INDEX index_name ON table(column(length))

  • 修改表结构的方式添加索引

ALTER TABLE table_name ADD INDEX index_name ON (column(length))

  • 创建表的时候同时创建索引

    CREATE TABLE `table` (

    `id` int(11) NOT NULL AUTO_INCREMENT ,

    `title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,

    `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,

    `time` int(10) NULL DEFAULT NULL ,

    PRIMARY KEY (`id`),

    INDEX index_name (title(length))

    )
  • 删除索引

DROP INDEX index_name ON table

五、创建索引建议

5.1 适合建索引

a、主键自动建立唯一索引
b、频繁作为查询条件的字段时候建立索引
c、查询中与其它表关联的字段,外键关系建立索引
d、where 里用不到的不建立索引
e、查询中排序的字段,建立索引将大大提高排序速度
f、查询中统计或分组的字段

5.2 不适合建索引

a、表记录太少
b、经常增删改的表,建立索引将使得更新变慢
c、数据重复,且分布平均的字段

六、Mysql索引结构

MySql索引使用的数据结构是B+树

  • 不使用Hash存储的原因是

a、使用hash存储必须使用好的hash算法。
b、hash存储由于数据分布的不均衡,比较占用内存。
c、hash存储不能进行范围查询,范围查询多于等值查询。(关键点)

  • 不使用二叉树、BST、AVL、红黑树的原因:

当插入的节点越来越多,会导致树的深度越来越深,导致查询变慢。

6.1 BTree索引

6.2 Hash索引

6.3 Full-text全文索引

6.4 R-Tree索引

七、关于索引的常见问题

  • B+树有多少层

3~4层足够

  • 索引用int 还是varchar

索引字段存储空间越小越好

  • 索引为什么要自增

会引起底层的数据分裂或合并,影响性能

相关文章

  • Mysql高级学习(3):索引概述及使用索引的优劣势

    Mysql高级学习(3):索引概述及使用索引的优劣势 3.1索引概述 MySQL官方对索引的定义为:索引(inde...

  • Mysql高级(三) 索引概述

    一、索引定义 索引(Index)是帮助Mysql高效获取数据等数据结构。 索引是排好序的快速查找数据结构,故影响s...

  • MySql原理 - 索引

    1.索引 1.1 索引概述 MySQL官方对索引的定义:索引(index)是帮助MySQL高效获取数据的数据结构(...

  • 索引

    1.1 索引概述 MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序)。...

  • MySQL索引概述

    1. 管理索引的语法 查看表存在的索引 创建索引 删除索引 注:还有一种通过 create index 和 dro...

  • 2.索引

    [TOC] 1. 索引概述 MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构...

  • MySQL——索引

    索引概述 MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之...

  • Mysql索引的设计、使用和优化

    Mysql索引概述 所有MySQL列类型可以被索引。对相关列使用索引是提高SELECT操作性能的最佳途径。根据存储...

  • mysql高级知识

    mysql高级知识系列目录 存储过程与函数 理解MySQL数据库覆盖索引 为什么 MySQL 索引要使用 B+树而...

  • mysql高级:视图、事务、索引

    # mysql高级:视图、事务、索引 * 视图 * 事务 * 索引 * 账户管理 * 主从 ## 1.视图 动态抽...

网友评论

      本文标题:Mysql高级(三) 索引概述

      本文链接:https://www.haomeiwen.com/subject/ruskghtx.html