1、使用覆盖索引来避免回表。
2、使用自增字段作为主键优化查询。
3、前缀索引,减少索引存在页,进而在查询是减少io,提高效率。
order by 无法使用前缀索引,无法把前缀索引作为覆盖索引。
4、如果查询条件中使用or,且or的前后条件中有一个列没有索引,那么涉及索引都不会被使用到。
5、可以尝试通过force index 来强制使用索引。
6、mysql事务的隔离性通过 锁来实现,事务的原子性和一致性通过undolog和mvcc实现。
事务的持久性通过redolog + binlog 来保证
7、行锁的具体实现算法 record lock、gap lock 以及 next-key lock。 常见死锁是在rr事务隔离级别下 select for update 会加gap lock。
8、避免的死锁方式 设置超时时间 innodb_lock_wait_timeout 来设置超时时间,避免相互等待;避免长事务,将事务拆解,降低与其他事务发生冲突的概率。打开死锁检测 innodb_deadlock_detect = on 打开死锁检测,发生则mysql自主选择回滚。
9、共享锁和排他锁属于行锁,意向锁属于表锁。