MySQl常见面试题

Mysql 常见面试题

1. InnoDb 与 MyISM的区别 说出5条
InnoDB支持事务,MyISM不支持
InnoDB支持外键,MyISM不支持
InnoDB支持行级锁,MyISM为表级锁,InnoDB如果命中索引,则为行索引,如果没有命中,则退化为表级锁。
InnoDB为聚集索引, MyISM为非聚集索引
InnoDB支持MVCC, MyISM不支持
InnoDB不支持全文索引,MyISM支持
InnoDB不保存表数据的总条数,MyISM则保存
InnoDB必须有主键,而MyISM不是。

如何选择:
1. 如果必须使用事务,则使用InnoDB
2。 如果所有操作为读操作,则使用MyISM,有写操作,则使用InnoDB

InnoDB 推荐使用自增id作为索引, 自增ID可以保证每次插入B+树时时向右扩展的,可以避免B+树频繁的合并和分裂。
如果使用字符串主键和随机主键,会使数据插入随机,效率差。

InnoDB 引擎的4大特性
插入缓冲,二次写,自适应哈希索引,预读。

MySQL中的索引分为三种
1. B+树索引
2. Hash索引
3. 全文索引。


平衡二叉树, 左右两边高度相差不超过1, 左边节点都小于根节点,右边节点都大于根节点。
B树与平衡二叉树的区别, 平衡二叉树一个节点仅保存一个数据,无法满足需求。B树一个节点可以保存多个数据。
B+树与B树的区别,B+树非叶子节点仅保存键值,不保存数据,只在叶子节点保存数据。


聚集索引与非聚集索引的区别, 以主键为B+树键值的为聚集索引,
而非聚集索引则是以非主键为键值的,叶子节点不保存数据,而是保存数据对应的主键的地址。

事务的4中特性,ACID, 原子性、一致性、隔离性、持久性。

4中隔离级别 , 未授权读取, 授权读取, 可重复读, 串行化。
未授权读取可能导致脏读、幻读、不可重复读。
授权读取,可以防止脏读,但是会出现幻读,不可重复读。
可重复读,可能导致幻读。
串行, 性能差

mysql的查询索引优化

组合索引 符合最左匹配, 比如 a b c d的组合索引 查询条件为 a=1 and b=2 and c>3 and d=4, 则会用上 a b c的索引,d的索引用不上。

order by limit 性能差,在起点越高,则性能越差, 改成between
比如 select * from user limit 1000,10 改成 select * from user where id between 1000 and 1010会好很多。
打开查询缓存
使用explain,查询是否命中缓存。
添加合适的索引
避免使用select ×
使用ENUM而不是varchar
使用not null
ip转换为unsigned int
固定长度的表性能更快
垂直分割
避免使用!= 和<>,因为会导致全表查询
避免使用in not in 会导致全表查询, 使用between代替
使用exists 替换in
一个表的索引不要超过6个
prepread statemenet

 

MySQl常见面试题

上一篇:《MySQL技术内幕-InnoDB存储引擎》整理3-表


下一篇:MySQLdb._exceptions.OperationalError: (2026, 'SSL connection error: unknown error number')