1.MySQL 提示“不存在此列”是执行到哪个节点报出的?
此错误是执行到分析器阶段报出的,因为mysql会在分析器阶段检查sql语句的正确性。
2.mysql查询缓存的功能有何优缺点?
mysql查询缓存功能是在连接器之后发生的,它的优点是效率高,如果已经有缓存则会直接返回结果,查询缓存的缺点是失效太频繁导致缓存命中率比较低,任何更新表操作都会清空查询缓存,因此导致查询缓存非常容易失效。
3.如何关闭mysql的查询缓存功能?
mysql查询缓存默认是开启,配置querycachetype 参数为demand按需使用,关闭查询缓存mysql 8.0之后直接删除了查询缓存的功能。
4.mysql的常用引擎都有哪些?
mysql的常用引擎有innodb,myisam,memory等,从mysql 5.5.5版本开始 innodb就成为了默认的存储引擎。
5.mysql可以针对表级别设置数据库引擎吗? 怎么设置?
可以针对不同的表设置不同的引擎,在create table语句中使用 engine=引擎名 比如Memory来设置此表的存储引擎。
create table student( id int primary key auto_increment, username varchar(120), age int) ENGINE=Memory
6.常用的存储引擎innodb和myisam有什么区别?
innodb和myisam最大的区别是innodb支持事务,而myisam不支持事务,他们主要区别如下:
a.innodb支持崩溃后安全恢复,myisam不支持崩溃后安全恢复
b.innodb支持行级锁,mysiam不支持行级锁,只支持表锁
c.innodb支持外键,myisam不支持外键
d.myisam性能比innodb高
e.myisam支持fulltext类型的全文索引,innodb不支持fulltext类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好
f.innodb主键查询性能高于myisam
7.innodb有哪些特性?
a.插入缓冲:对于非聚集索引的插入和更新,不是每一次直接插入索引页中,而是首先判断插入的非聚集索引页是否在缓冲池中,如果在,则直接插入,否则先放入一个插入缓冲区中,好似欺骗数据库这个非聚集的索引已经插入到叶子节点了,然后再以一定的频率执行插入缓冲和非聚集索引页子节点的合并操作,这时通常能将多个插入合并到一个操作中,这样就大大提高了对非聚集索引执行插入和修改操作的性能。
b.两次写(double write):两次写给 InnoDB 带来的是可靠性,主要用来解决部分写失败(partial page write)。doublewrite 有两部分组成,一部分是内存中的 doublewrite buffer ,大小为 2M,另外一部分就是物理磁盘上的共享表空间中连续的 128 个页,即两个区,大小同样为 2M。当缓冲池的作业刷新时,并不直接写硬盘,而是通过 memcpy 函数将脏页先拷贝到内存中的 doublewrite buffer,之后通过 doublewrite buffer 再分两次写,每次写入 1M 到共享表空间的物理磁盘上,然后马上调用 fsync 函数,同步磁盘。如下图所示
c.自适应哈希索引(adaptive hash index):由于 InnoDB 不支持 hash 索引,但在某些情况下 hash 索引的效率很高,于是出现了 adaptive hash index 功能, InnoDB 存储引擎会监控对表上索引的查找,如果观察到建立 hash 索引可以提高性能的时候,则自动建立 hash 索引。
