1. MySQL 提示“不存在此列”是执行到哪个节点报出的?
该错误是在分析器阶段报出的。MySQL在分析器阶段会对SQL语句进行语法和逻辑检查,确保所有引用的列都存在。
2. MySQL查询缓存的功能有何优缺点?
MySQL查询缓存功能在连接器之后生效。其优点在于能够显著提高查询效率,如果查询结果已经在缓存中,则直接返回结果,无需再次执行查询。然而,其缺点是缓存失效频繁,任何对表的更新操作都会清空相关查询缓存,导致缓存命中率较低。
3. 如何关闭MySQL的查询缓存功能?
MySQL查询缓存默认是开启的。可以通过将配置参数`query_cache_type`设置为`DEMAND`来按需使用查询缓存。从MySQL 8.0开始,查询缓存功能已被移除。
4. MySQL的常用引擎有哪些?
MySQL的常用存储引擎包括InnoDB、MyISAM和Memory等。从MySQL 5.5.5版本开始,InnoDB成为默认的存储引擎。
5. MySQL可以针对表级别设置数据库引擎吗?怎么设置?
可以针对不同的表设置不同的存储引擎。在创建表时,可以在`CREATE TABLE`语句中使用`ENGINE=引擎名`来指定存储引擎。例如:
CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(120), age INT ) ENGINE=MEMORY;
6. 常用的存储引擎InnoDB和MyISAM有什么区别?
InnoDB和MyISAM的主要区别如下:
- InnoDB支持事务处理,而MyISAM不支持。
- InnoDB支持崩溃后的安全恢复,MyISAM不支持。
- InnoDB支持行级锁,而MyISAM仅支持表锁。
- InnoDB支持外键约束,MyISAM不支持。
- MyISAM的查询性能通常比InnoDB高。
- MyISAM支持全文索引,而InnoDB不支持,但可以通过Sphinx插件实现更好的全文索引支持。
- InnoDB在主键查询方面的性能优于MyISAM。
7. InnoDB有哪些特性?
- 插入缓冲:对于非聚集索引的插入和更新,InnoDB不会立即插入索引页,而是先判断索引页是否在缓冲池中。如果在缓冲池中,则直接插入;否则,先放入插入缓冲区,再以一定频率合并到索引页中,从而提高插入和更新的性能。
- 两次写(Double Write):两次写机制提高了InnoDB的可靠性,主要用于解决部分写失败的问题。该机制包括内存中的Double Write Buffer和物理磁盘上的128个连续页。当缓冲池的数据需要刷新到磁盘时,先写入Double Write Buffer,再分两次写入物理磁盘,并调用fsync函数同步磁盘。
- 自适应哈希索引(Adaptive Hash Index):虽然InnoDB不支持哈希索引,但在某些情况下,哈希索引可以显著提高查询性能。因此,InnoDB会根据表上索引的使用情况,自动建立哈希索引以提升性能。