美文网首页
MySQL面试题

MySQL面试题

作者: 紫色红色黑色 | 来源:发表于2019-10-31 23:17 被阅读0次

索引

索引原理

常用的索引模型有哈希索引,有序数组,搜索树。
哈希索引,适合等值查找,范围查找会触发全表扫描
有序数组索引,等值查找和范围查找效率高,但是在数组中间插入数据时会挪动该记录后面的数据。
innodb中每个索引都维护一个B+tree。主键索引叶子节点上key是主键值,value是行记录。非主键索引叶子节点上key是字段值,value是主键值。

索引优化

-- auto-generated definition
create table test
(
  id     int auto_increment
    primary key,
  name   varchar(40) null,
  age    int(12)     null,
  status int         null
);

create index name_age_k
  on test (name, age, status);

1.覆盖索引
如果一个索引包含所有需要查询的字段,这种行为就称为覆盖索引
2.B+tree最左前缀
类型转换时,字符串转数字依然可以使用索引,而数字转字符串则索引失效
3.索引下推
比如a,b,c,组成联合索引,sql条件是where a=1 and b >1 and c>1。如果没有索引下推,则查询a=1的数据给server,server层在判断b >1 and c>1。如果使用索引下推,则在引擎层就判断b >1 and c>1,返给server层的数据已经是结果数据了。

自增主键和UUID主键有什么区别

自增主键:
1.符合innodb索引存储是顺序递增存储特点,不对挪动其他数据,插入效率高,不会触发页分裂和页合并。
2.节省空间,非主键索引叶子节点是存储的是主键值,如果主键占用空间小,则会节省空间。
3.分布式数据库中,如果分表合并会主键冲突,无法确定主键的唯一性。可以自定义主键生成算法,既有顺序性,又有唯一性。如twitter的雪花算法
4.自增主键插入时,会有自增锁和间隙锁。

存储

innodb和myisam区别

myisam记录和索引分开存储,最小锁粒度是表锁,不支持事务,不支持外键,适用于大量读操作
innodb需要更多内存来缓存数据

https://segmentfault.com/a/1190000008227211

mysql cpu占用高

查看线程执行sql耗时情况。如果sql耗时长,可以优化sql

show full processlist;

相关文章

网友评论

      本文标题:MySQL面试题

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