MySQL相关知识与问题

存储引擎相关

MyISAM与InnoDB区别

InnoDB:支持数据库事务,还提供了行锁和外键。
MyIASM:不支持事务,也不支持行级锁和外键。
MEMORY:所有的数据都在内存中,数据的处理速度快,但是安全性不高。

MyISAM索引与InnoDB索引的区别?

InnoDB索引是聚簇索引,MyISAM索引是非聚簇索引。
InnoDB的主键索引的叶子节点存储着行数据,因此主键索引非常高效。
InnoDB的非主键索引的叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引会非常高效。
MyISAM索引的叶子节点存储的是行数据地址,需要再寻址一次才能得到数据。

存储引擎如何选择

一般没有特别需求,使用默认的Innodb即可。
MyISAM:以读写插入为主的应用程序,比如博客系统、新闻门户网站。
Innodb:更新(删除)操作频率高或者需要保证数据的完整性,并发量高,支持事务和外键。比如OA自动化办公系统。

索引相关

索引覆盖是什么

如果要查询的字段都建立过索引,那么引擎会直接在索引表中查询而不会访问原始数据(否则只要有一个字段没有建立索引就会做全表扫描),这叫索引覆盖。因此我们要尽可能的在select后只写必要的查询字段,以增加索引覆盖的几率

索引有哪几种类型

主键索引: 数据列不允许重复,不允许为NULL,一个表只能有一个主键。
唯一索引: 数据列不允许重复,允许为NULL值,一个表允许多个列创建唯一索引。
可通过 ALTER TABLE table_name ADD UNIQUE (column); 创建唯一索引

可通过 ALTER TABLE table_name ADD UNIQUE (column1,column2); 创建唯一组合索引

普通索引: 基本的索引类型,没有唯一性的限制,允许为NULL值。

可以通过ALTER TABLE table_name ADD INDEX index_name (column);创建普通索引

联合索引:指在多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀原则。
可以通过ALTER TABLE table_name ADD INDEX index_name(column1, column2, column3);创建联合索引
全文索引: 是目前搜索引擎使用的一种关键技术。

可以通过ALTER TABLE table_name ADD FULLTEXT (column);创建全文索引

创建索引的原则

(1) 最左前缀原则:mysql会一直向右匹配直到遇到范围查询(>、<、between、like)停止匹配,如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。

(2) 定义主键、外键的数据列一定要建立索引

(3)频繁作为查询条件的字段需要创建索引

(4) 更新频繁的、查询很少的、重复值比较多字段不适合创建索引

(5) 尽量的扩展索引,不要新建索引。如表中已经有a的索引,现在要加(a,b)的索引,那么只需修改原来的索引就可以

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值