常见的储存引擎
InnoDB MyISAM
MyISAM和InnoDB的区别
①InnoDB支持事务,MyISAM不支持②InnoDB是行级锁,MyISAM是表级锁③InnoDB支持外键,MyISAM不支持外键④MyISAM支持全文索引,InnoDB部分版本不支持,但是我们可以通过插件来实现⑤InnoDB支持多版本并发控制,MyISAM不支持
MySQL的事务隔离级别有哪些
已读未提交:一个事务还没提交的时候,他的操作可以被其他事务看到已读已提交:一个事务提交之后,他的操作才可以被其他事务看到可重复读:一个事务执行过程中,他读取到的数据总是一致的可串行化:一个事务读取数据的时候会进行加锁,如果其他事务要读取数据,只能等之前事务完成之后才能读取
一千万条数据的表, 如何分页查询
我们使用limit来进行分页的话,执行时间会很长,我们可以使用当前页最后一条id来帮我们提高效率,也就是再加上id来作为分页的条件 select * from where id>#{id} limit #{limit},这种情况下id是要有序的
订单表数据量越来越大导致查询缓慢, 如何处理
由于订单表的使用率不高,我们可以将之前的订单数据按月或者年进行分库分表操作,减轻我们数据库查询的负担
MySQL中有哪些锁
①行级锁:开销大,锁速度慢,会出现死锁,锁定粒度是最小的,并发度是最高的②表级锁:开销小,锁速度快,不会出现死锁,锁定粒度也是最大的,并发度是最底的③页面锁:处于行级锁和表级锁之间,会出现死锁,并发度一般
MySQL 中有哪些不同的表格
MyISAM ISAM:早期Mysql版本的缺省表类型InnoDB Merge heap:读取速度最快
CHAR 和VARCHAR 的区别
char是长度不可变的,varchar是长度可变的char的效率比varchar效率要高
可以使用多少列创建索引
一个表中最多可以有16个索引列
NOW()和 CURRENT_DATE()有什么区别?
now(): 年月日时分秒current_date(): 年月日
什么是通用 SQL 函数?
MySQL中提供了很多函数让我们进行调用,比如:YEAR(),MAX(),CONCAT(),MOUNTH(),CURRENT_DATE()
MySQL支持事务吗
在缺省模式下,mysql是autocommit模式的,当数据库进行修改操作的时候就会自动提交,所以在缺省模式下是不支持事务的但是如果表的类型是InnoDB或者是BDB模式的话,是可以支持事务的,也就是通过setAutocommint=0来进行设置,但是设置了之后事务需要我们手动commit或者进行rockback回滚
MySQL的优化有哪些?
①我们可以添加索引来提高数据的查询效率 索引分为BTree和哈希索引,哈希索引底层是哈希表,搜索效率比较高②通过sql语句来进行优化 比如添加orderBy 或者条件查询 (遵从小表驱动大表原则)③通过存储引擎来进行优化,存储引擎有InnoDB(事务)和MyISAM(查询效率高)④通过分库分表:根据规律分,降低数据库的压力(主从分库 主库负责写,从库负责读)水平分库/分表垂直分库/分表垂直分表:可以将很多字段的表进行分表操作,将热点数据的放一个表,不是热点数据的放一个表(比如用户表)垂直分库:我们可以将通用表,字典表分到一个数据库中
Myql语句的执行流程from -> on -> join -> where -> group by ->having -> select -> distinct -> order by
Explain关键字
我们可以跳过explain关键字来查询当前这个sql语句的执行计划,也就是是否引入索引,有没有全表扫描
Explain命令执行后type类型可能出现什么参数?
null ->system->const->eq_ref->ref->range->index->all (性能从好到差)
Profiling工具的作用
profiling可以查询优化前sql和优化后sql的性能(执行时间),默认是不开启的,我们可以通过set profiling=1来开启
单路排序和多路排序的区别与原理分析