被面试官问到的几个mysql的问题
-
mysql索引什么情况下会失效?
1.or 每个条件都必须有索引才会使用不然会导致失效
2.like 百分号必须不能在第一个位置否则索引失效
3.in != 不使用索引
4.联合索引最左原则
5.全表扫描比使用索引快的时候索引会失效 -
myisam和innodb
1.myisam索引和数据是分开的,b+树只有叶子节点上存放了数据的地址,在磁盘上是三个文件,innodb索引跟数据是在一起的,b+树叶子节点有数据而不是引用
2.myisam不支持事物和外键,innodb支持
3.myisam只支持表级锁,innodb可以支持行级锁
4.myisam支持全文索引,innodb不支持支持
5.myisam记录了表的永数据行,查询数据行数比较快,如果加了where条件跟innodb效率就差不多了。
6.在选择的时候需要考虑表需不需要支持事物,需不需要全文索引和外键 -
索引用hash还是b+树 hash索引普通查询效率比b+树高,但是不支持范围查找,b+树的叶子节点记录了下一个节点的位置
-
聚簇索引和非聚簇索引 数据和索引在一起就是聚簇索引比如innodb是天生的聚簇索引,非聚簇索引就是索引节点只存储了数据行的地址,所有数据单独存放,比如myisam
这些内容是我自己的理解,有什么不对的地方请一定给我提出来!!!