1、主从复制,
2、sql优化(不用in,count(*),where不用函数,用between and exists等)
https://blog.csdn.net/wenzhenyu1990/article/details/87363637
3、常见sql的书写(not exists所有都用(双重not exists)) , group by having ,max(case cid when '1' then grade end)as '科目' union all 与union)
https://www.jianshu.com/p/0f165dcf9525
4、索引
B-Tree索引和Hash索引:
hash查找快直接定位值,而B-Tree需要从根到叶子节点
哈希索引没办法利用索引完成排序
哈希索引不支持多列联合索引的最左匹配规则
如果有大量重复键值的情况下,哈希索引的效率会很低,因为存在哈希碰撞问题
https://www.cnblogs.com/zhouguowei/p/9753828.html
聚簇索引和非聚簇索引:回表,覆盖查询(指一个查询语句的执行只用从索引中就能够取得,不必从数据表中读取。也可以称之为实现了索引覆盖。)
(怎么建联合索引时)
最左前缀匹配:即最左优先,在检索数据时从联合索引的最左边开始匹配。所以当我们创建一个联合索引的时候,如(key1,key2,key3),相当于创建了(key1)、(key1,key2)和(key1,key2,key3)三个索引,这就是最左匹配原则
Mysql5.6的优化:索引下推(可以在like查询下减少回表查询的次数)
select * from user_table where username like '张%' and age > 10
语句有两种执行可能:
- 根据(username,age)联合索引查询所有满足名称以“张”开头的索引,然后回表查询出相应的全行数据,然后再筛选出满足年龄小于等于10的用户数据
- 根据(username,age)联合索引查询所有满足名称以“张”开头的索引,然后直接再筛选出年龄小于等于10的索引,之后再回表查询全行数据。
明显的,第二种方式需要回表查询的全行数据比较少,这就是mysql的索引下推。mysql默认启用索引下推,我们也可以通过修改系统变量optimizer_switch的index_condition_pushdown标志来控制SET optimizer_switch = 'index_condition_pushdown=off';
https://blog.csdn.net/mccand1234/article/details/95799942
查询优化器?
建索引的原则:
Explain
https://www.cnblogs.com/gomysql/p/3720123.html
5、存储引擎
InnerDB:
Myisam:
事务隔离级别
并发问题:脏读、不可重复读、幻读
SELECT … FOR UPDATE [OF column_list][WAIT n|NOWAIT][SKIP LOCKED];
mysql慢日志查询
https://blog.csdn.net/zxc123e/article/details/77908432