社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

2020-11-07-Mysql(优化基础)

隐约喜欢萌萌哒 • 4 年前 • 227 次点击  

1.三大范式

  • 第一范式:确保每列的原子性(强调的是列的原子性,即列不能够再分成其他几列).
  • 第二范式:在第一范式的基础上更进一层,目标是确保表中的每列都和主键相关(一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的部分)
  • 第三范式:在第二范式的基础上更进一层,目标是确保每列都和主键列直接相关,而不是间接相关(另外非主键列必须直接依赖于主键,不能存在传递依赖).
image.png
image.png

2.explain

(索引)


image.png

(哪些情况用索引)


image.png

(id 注意如果有虚拟表则虚拟表的后面的数字是id号)


image.png

(select_type)


image.png

(type)


image.png

(是否用到了索引)


image.png
image.png
image.png
image.png

(extra)


image.png

3.索引优化

image.png

image.png

4.为什么不建议用select * ?

假设某一天修改了表结构,如果用select *,返回的数据必然会会变化,客户端
是否对数据库变化作适配,是否所有地方都做了适配,这都是问题。
可能会存在不需要的列,传输过程中有不必要的性能损耗;
客户端解析查询结果也需要更多损耗

5.例题

使用了select ,必然导致数据库需要先解析代表哪写字段,从数据字段中将*转化为具体的字段含义,存在性能开销;
由于覆盖索引我们可能只要获取索引,select * 增加了不必要的io流

image.png

6.order by

image.png

7.锁理论

image.png

脏读 :
读取到了未提交的数据(如果事务这时候回滚了,那么第二个事务就读到了脏数据)

不可重复读
重点是修改:在同一事务中,同样的条件,第一次读的数据和第二次读的数据不一样。(一个事务多次读取同一范围内数据时,另外一个事务发生insert操作并提交了)。数据变化。

幻读
重点在于新增或者删除:在同一事务中,同样的条件,,第一次和第二次读出来的记录数不一样。(一个事务多次读取同一条数据时,另外一个发生了事务发生update,delete操作并提交了。insert操作一条新数据并不会影响刚才被读的那条数据。)。行数变化。

(读取数据一致性的描述)


image.png
image.png

(锁住行)


image.png
image.png
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/99124
 
227 次点击