1、一般情况索引type优先级
 system>const>eq_ref>ref>range>index>all
 一般保证查询到达range建议ref。
 2、Explain sql:分析sql工具;show warnings :是mysql建议优化的sql。
 3、Extra
 using index使用覆盖索引,结果集的字段全部都在索引字段中。
 using where 查询列未被索引字段覆盖。
 using index condition 查询字段不完全被索引字段覆盖,有范围查询。
 using temporary 使用临时表
 using file sort 使用外部排序而不是索引排序,数据少时,采用的是内存排序,反之将在磁盘上执行排序,此种情况一般也要考虑优化索引。
 select tables optimized away使用聚合函数访问存在索引的字段。4.联合索引依赖最左前缀法则,也就是说查询字段按照索引字段的顺序。
 5、sql中出现聚合函数将导致索引失效。
 6、存储引擎不使用sql范围查找右后面的索引字段。
 7、!=、<>、 is Null、not null一般也不走索引。
 8、以通配符开始的like不会走索引,优化建议通配符后置或者中间,使用覆盖索引。
 9、字符串不加引号会导致索引失效。
 10、少用or和in这类。
 11、mysql Trace工具分析mysql索引耗费时间。
 12、单路排序和双路排序
 单路排序-一次性取出满足条件的所有字段,然后在sort buffer中进行排序。
 双路排序(回表排序)-首先取出排序的字段和可以直接定位行数据的ID,然后进行排序,排完序后再次取回其他需要的字段。
 13、myisam 表锁,读锁阻塞写不阻塞读,写锁阻塞读写。
 14、MVCC机制 多版本并发控制,提升读的性能。mysql底层会更新和删除操作增加两个隐藏字段,创建事务ID和删除事务ID,事务启动是在begin后第一条执行语句时产生的。底层是undolog记录事务的操作过程。
 15、间隙锁:也能解决幻读。
 16、innodb如果索引失效将走的是表锁,走索引的话是航锁。
 17、mysql的主从架构
 数据同步方式:同步,异步,半同步(replay后发ack)。
 18、mysql高可用架构
 mmm模式(可能发生脑裂),MHA模式
 19、分库分表插件
 shardingsphere(京东数科)
 mycat(基于阿里cobar)
 20、mysql和redis缓存的强一致性解决方案:
 通过阿里中间件canal模拟mysql-slave,采用MySQL同步模式往redis里同步数据来包装。
 21、powerdesigner 设计数据库(逆向数据库)22、索引是排好序的数据结构
二叉树单边增长树,导致索引失效;
 红黑树是二叉平衡树,数据量大的话,自动平衡需要消耗很多IO性能,树的高度不可控;
 B-树:索引进行了横向扩容,节点存储了数据导致不能存储更多的数据,所有的索引元素都不重复,大概大节点16KB
 B+树:非叶子节点不存储数据,中间节点索引可能重复。
 hash索引,不支持范围查询
 23、关联查询优化建议
 关联查询条件加索引
 小表驱动大表A 大 B小用 in查询
 A小B大用 exists 查询