mysql索引

Mysql索引

索引是什么

索引是帮助mysql高效获取数据的数据结构,数据库索引好比一本书前的目录,能加快数据库的查询速度
索引往往是存储在磁盘上的文件中
优势:可以提高数据检索的效率
劣势:索引会占据磁盘空间,会降低更新表的效率

索引类型

主键索引:索引列中的值必须是唯一的,不允许有空值
普通索引:mysql中普通索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值
唯一索引:索引列中的值必须是唯一的,但是允许为空值
全文索引:在进行like模糊查询时效率比较低,这时可以创建全文索引
空间索引:mysql在空间索引这方面遵循OpenGIS几何数据模型规则
前缀索引:可以指定索引列的长度,但是数值类型不能指定

索引的数据结构

Hash表
二叉树
B+树

mysql的索引实现

两种存储引擎的索引实现:MyISAM索引InnoDb索引

  • 创建单个字段索引的语法:CREATE INDEX 索引名 on 表名(字段名)
  • 创建联合索引的语法:CREATE INDEX 索引名 on 表名(字段名1,字段名2)
  • 索引命名格式一般可以这样:idx_表名_字段名。注意有长度限制
  • 删除索引:DROP INDEX 索引名 ON 表名

  • 中到大数据量表适合使用索引
  • 小数据量表,大部分情况全表扫描效率更高
  • 特大数据量表,建立和使用索引的代价会随之增大,适合使用分区或分库

image.png

索引:排好序的快速查找数据结构
单值索引: 即一个索引只包含单个列,一个表可以有多个单例索引
唯一索引: 索引列的值必须唯一,但允许有空值
复合索引: 即一个索引包含多个列

基本语法:
创建:

  • create [unique] index indexName ON mytable(columnname(length));
  • alter mytable add[unique] index[indexName] ON(columnname(length));

删除:DROP INDEX[indexName] ON mytable;

查看:SHOW INDEX FROM table_name\G

mysql索引结构:BTree索引、Hash索引


频繁作为查询条件的字段应该创建索引
频繁更新的字段不适合创建索引
where条件里用不到的字段不创建索引


不适合建立索引
表记录太小
经常增删改的表
数据重复且分布平均的表的字段

你可能感兴趣的:(mysql)