ITPub博客

首页 > 数据库 > > MySQL的存储引擎和索引

MySQL的存储引擎和索引

作者:unnamed persona 时间:2019-12-14 14:47:13 0 删除 编辑

文章目录

存储引擎和索引

存储引擎

索引

语法示例

使用场景

索引优化原则

存储引擎和索引

与数据库的交互性能下降、命令执行时间长等问题可能源自于不合理的查询语句,也可能是选择了错误的存储引擎、未建立索引的字段或失效的索引。这里我们简单介绍常用存储引擎的区别,并对索引有一个初步的了解。

存储引擎

常用存储引擎之间的区别:

对比项 MyISAM InnoDB

主外键 不支持 支持

事务 不支持 支持

行表锁 表锁,即使操作一条记录也会锁住整个表。 行锁,操作时只锁某一行,不对其他行有影响,适合高并发操作。

缓存 只缓存索引,不缓存真实数据。 不仅缓存索引还要缓存真实数据,对内存要求较高。

表空间 小 大

关注点 性能 事务

默认安装 Y Y

索引

索引是一种用以提升数据查询和排序性能的数据结构,它将数据以B Tree数据结构的方式进行排序,使得查询时不需要进行线性查找,而是以极短的时间定位到数据所在的节点,再从节点中找出数据。

索引的劣势

索引需要占用一定的存储空间。

索引提高了查询速度,但由于增删改操作同时需要更新索引,这些操作效率就会降低。

语法示例

# 主键

ALTER TABLE `user` ADD PRIMARY KEY (`id`)

# 唯一键

ALTER TABLE `user` ADD UNIQUE uk_name (`name`)

# 单值索引

ALTER TABLE `user` ADD INDEX idx_role (`role`)

# 复合索引

ALTER TABLE `user` ADD INDEX idx_namePassword (`name`, `password`)

# 全文索引

ALTER TABLE `user` ADD FULLTEXT ftk_password (`password`)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

使用场景

主键会自动建立唯一索引。

频繁查询或用作分组的字段应创建索引。

作为与其他表关联列的字段应创建索引。

频繁更新的字段不适合创建索引。

如果是包含大量重复数据的字段不适合创建索引。

索引优化原则

如果需要在查询中使用复合索引,必须从索引的最左列开始使用,且不跳过中间的列。

不要在索引列上进行计算、函数、类型转换等操作,否则将导致索引失效。

如果在使用复合索引的查询中,对某一索引列进行范围查询,该索引列之后的索引都将失效。

尽量使用覆盖索引,即查询列与使用到的索引列一致。(减少SELECT *)

如果使用不等于操作进行索引列的扫描,将会导致索引失效。

如果使用IS NULL或IS NOT NULL进行索引列的扫描,将会导致索引失效。

使用模糊查询进行索引列的范围扫描时,如果参数常量的左边有“%”通配符,索引将失效。可以通过使用覆盖索引解决该问题。

如果索引列进行查询时参数的常量应为字符串,那么需要添加引号,否则索引将失效。

如果索引列进行查询时使用OR关键字连接条件,那么索引将失效,应尽量避免使用。

————————————————

版权声明:本文为CSDN博主「早季9」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/saki09/article/details/103525628

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69949628/viewspace-3163280/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-12-04

  • 博文量
    158
  • 访问量
    0