美文网首页
MySQL索引实现原理

MySQL索引实现原理

作者: 刘一一同学 | 来源:发表于2019-09-15 09:11 被阅读0次

1. 什么是索引

索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址,在表数据十分庞大时,索引可以大大提高查询速度。因为,使用索引后不再遍历整张表,而是先通过索引表找到该行数据的物理地址,然后访问相应的数据。(数据库索引好比是一本书的目录,能加快数据库的查询速度)

2. 索引的类型

2.1 普通索引(Index)

最基本的索引,没有任何限制。

1、创建索引
CREATE INDEX index_name ON table(column(length))
2、修改表结构的方式添加索引
ALTER TABLE table_name ADD INDEX index_name ON (column(length))
3、创建表的时候同时创建索引
CREATE TABLE `table` (
    `id` int(11) NOT NULL AUTO_INCREMENT ,
    `title` char(255) CHARACTER NOT NULL ,
    `content` text CHARACTER NULL ,
    `time` int(10) NULL DEFAULT NULL ,
    PRIMARY KEY (`id`),
    INDEX index_name (title(length))
)
4、删除索引
DROP INDEX index_name ON table;

2.2 主键索引(Primary Key)

一个表只能有一个主键,不允许有空值,一般是在建表的时候同时创建主键索引。

1、创建表时同时创建索引
CREATE TABLE `table` (
    `id` int(11) NOT NULL AUTO_INCREMENT ,
    `title` char(255) NOT NULL ,
    PRIMARY KEY (`id`)
);

2.3 全文索引(FullText Index)

主要用来查找文本中的关键字,MySQL允许在char、varchar、text类型上建立全文索引。对于较大的数据集,把数据添加到没有全文索引的表中,然后建立全文索引,往往比有全文索引的表中添加数据的速度快。MySQL5.6版本之后InnoDB存储引擎开始支持全文索引,支持英文,对中文不支持。5.7版本之后通过使用ngram插件开始支持中文。

1、创建表的适合添加全文索引
CREATE TABLE `table` (
    `id` int(11) NOT NULL AUTO_INCREMENT ,
    `title` char(255) CHARACTER NOT NULL ,
    `content` text CHARACTER NULL ,
    `time` int(10) NULL DEFAULT NULL ,
    PRIMARY KEY (`id`),
    FULLTEXT (content)
);
2、修改表结构添加全文索引
ALTER TABLE article ADD FULLTEXT index_content(content);
3、直接创建索引
CREATE FULLTEXT INDEX index_content ON article(content);

2.4 组合索引

指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀原则。

ALTER TABLE 'table_name' ADD INDEX index_name('col1','col2','col3');

在使用组合索引时可能因为列名长度过长导致索引的key太大,导致效率降低,在允许的情况下,可以只取col1和col2的前几个字段作为索引。

ALTER TABLE 'table_name' ADD INDEX index_name(col1(4),col2(3));

3. 索引的优缺点

3.1 索引优点

  • 可以快速检索,减少I/O次数(将随机I/O变为顺序I/O)。
  • 根据索引分组和排序,可以加快分组和排序。

3.3 索引缺点

  • 创建索引和维护索引需要时间成本,时间会随着数据增大而增大。
  • 当对表进行删除、添加和修改的时候,索引也要动态维护,降低了数据的维护速度。

相关文章

  • MySQL索引及查询优化书目录

    MySQL索引的原理之索引目的 MySQL索引的原理之索引原理 MySQL索引的原理之索引的类型 MySQL索引的...

  • 99 MySQL性能实战优化

    mysql 性能优化 一 MySQL架构与执行流程原理 二 MySQL 索引底层实现原理 三 MYSQL事务...

  • MySQL索引详解(四)BTree为什么更适合做索引结构

    根据文章MySQL索引详解(三)索引的底层原理,了解了MySQL的索引实现原理,那么为什么在众多的数据结构中,索引...

  • MySQL索引底层实现原理 & MyISAM非聚簇索引 vs.

    MySQL索引底层实现原理 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构...

  • MySQL索引基础知识

    MySQL索引底层实现原理 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构...

  • Mysql实现原理

    深入理解 MySQL 底层实现 - GitChat技术杂谈 - CSDN博客 MySQL中B+Tree索引原理 -...

  • 字节跳动后端面经(11)

    MySQL索引数据结构、索引分类、联合索引、MySQL悲观锁和乐观锁怎么实现的 B+树、AVL、红黑树的原理 TC...

  • Mysql 索引的具体优化策略

    前言:Mysql索引的底层实现原理包括数据结构和不同的mysql引擎下索引的实现方式会在另一篇文章中详细描写,这里...

  • MySQL索引实现原理

    1. 什么是索引 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址,在表数据十分...

  • mysql索引实现原理

    什么是索引:索引是一种高效获取数据的存储结构,例:hash、 二叉、 红黑。Mysql为什么不用上面三种数据结构而...

网友评论

      本文标题:MySQL索引实现原理

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