问题集:https://blog.csdn.net/qq_22222499/article/details/79060495
1、msyql优化经验
1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
2、应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用索引而进行全表扫描。
3、尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。
4、任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。
5、避免频繁创建和删除临时表,以减少系统表资源的消耗。诸如此类,等等等等.
2、四种隔离级别
https://blog.csdn.net/tolcf/article/details/49283575
读未提交Read uncommitted,
读已提交Read committed,
可重复读Repeatable read,
可串行化Serializable。
• 串行化(Serializable):所有事务一个接着一个的执行,这样可以避免幻读(phantom read),对于基于锁来实现并发控制的数
据库来说,串行化要求在执行范围查询的时候,需要获取范围锁,如果不是基于锁实现并发控制的数据库,则检查到有违反
串行操作的事务时,需回滚该事务。
• 可重复读(Repeated Read):所有被Select获取的数据都不能被修改,这样就可以避免一个事务前后读取不一致的情况。但
是没有办法控制幻读,因为这个时候其他事务不能更改所选的数据,但是可以增加数据,因为强恶意事务没有范围锁。
(不可重复读的重点是修改,幻读的重点在于新增或者删除。)
• 读已提交(Read Committed):被读取的数据可以被其他事务修改,这样可能导致不可重复读。也就是说,事务读取的时候
获取读锁,但是在读完之后立即释放(不需要等事务结束),而写锁则是事务提交之后才释放,释放读锁之后,就可能被其他
事务修改数据。改等级也是SQL Server默认的隔离等级
• 读未提交(Read Uncommitted):最低的隔离等级,允许其他事务看到没有提交的数据。
3、MyISAM与InnoDB的区别
https://www.jb51.net/article/62457.htm##1
https://www.cnblogs.com/zhangjinghe/p/7599988.html
一般来说,MyISAM适合:
(1)做很多count 的计算;
(2)插入不频繁,查询非常频繁;
(3)没有事务。
InnoDB适合:
(1)可靠性要求比较高,或者要求事务;
(2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况指定数据引擎的创建。
数据库常见死锁原因及处理
https://blog.csdn.net/qq_34246546/article/details/79409185
事务和锁机制是什么关系? 开启事务就自动加锁了吗?
- 事务与锁是不同的。事务具有ACID(原子性、一致性、隔离性和持久性),锁是用于解决隔离性的一种机制。
- 事务的[隔离级别]通过锁的机制来实现。另外锁有不同的粒度,同时事务也是有不同的隔离级别的。
- 开启事务就自动加锁。
- 同时事务也是有不同的隔离级别的 :
网友评论