需求:数据加载慢(卡)

其实是SQL的优化

学习路线:

(选择数据库)-》业务分析(表,字段)-》逻辑设计(范式-》关系表,反范式-》宽表)

-》物理设计(选择存储引擎》数据类型》对象命名-》建立库表)

-》索引优化(慢查询-》执行计划)

-》SQL改写

-》事务ACID(由于高并发-》产生阻塞,死锁)

-》高可用,高可扩展(集群,负载均衡,主从复制,读写分离,分库分表(水平分割,垂直分割))

一,数据库:MySQL

二,业务分析:根据项目需求,得出需要创建的表,每个表应该有什么字段

三,逻辑设计:

三大范式:

  1. 单个字段不能再分。如:联系方式-》拆分-》手机,微信,QQ。。。
  2. 非主键字段必须依赖主键(有主键才有非主键,人在塔在)
  3. 非主键之间不能相互依赖(女朋友和小三不兼容)
  • 优点:减少数据冗余
  • 缺点:增加关联,产生关系表

反范式:根据业务需要,把需要的数据放进表中。

  • 优点:减少关联表(运用:1:N关系,将1中适当的字段放进N中)
  • 缺点:泛用使数据冗余,产生宽表

宽表:将所有字段放一个表中

关系表:两个表的关联

四,物理设计

存储引擎:INNODB

数据类型:

  1. 优先使用字节小的类型(timestamp代替datetime,字符串转整型存储,varchar代替text)
  2. 精度用decimal
  3. 不为NULL

对象命名:

  1. 包含库名
  2. 小写+下划线
  3. 不使用保留字
  4. 见名识义
  5. 相同数据列,列名和数据类型一致
  6. 临时表tmp,备份表bak前缀,日期为后缀

建立库表:DDL语句

五,索引优化:索引=目录,更快查询。常用主键,普通索引,唯一索引,联合索引

  1. 索引不是越多越好
  2. where,on/using,group,order,distinct中加索引(order by NULL:不进行文件排序)
  3. 索引列不能使用表达式和函数
  4. NOT IN和<>不能使用索引
  5. 范围查询的右边列不能使用索引
  6. order中全部列,group和order在一个表中
  7. 联合索引顺序:只能从最左侧使用索引,且不能跳过其中一列
  8. 覆盖索引:select,where中的列都是索引
  9. 前缀索引:一段字符串的最前一部分作为索引。唯一性越高越好,但不能过多

六,SQL改写

  1. 使用join或CTE(8.0的公共表表达式)代替子查询
  2. 大SQL改小SQL
  3. 巧用计算列
  4. 使用limit,field,count(*)
  5. 汇总表
  6. 缓存数据

附录:

2.MVC(封装),解耦合(相关理解耦合度)

3.对于修改数量的计算,封装成一个统计方法,每次如果涉及到修改,调用一下这个方法

4.多个类中都用到的API,封装到common控制器中

PHP增删查改性能优化相关推荐

  1. mysql索引使增删变慢_mysql优化之索引篇

    mysql,对it打工人,这个几乎是必备的技能之一.mysql可以解决我们平时工作中的大量的.有关增删查改的问题.所以想深入了解mysql,我觉得关键在于他的增删查改背后的算法,开搞. 面对增删查改等 ...

  2. 数据结构-带头双向循环链表(增删查改详解)

    在上一篇博客中,详细介绍了单链表的增删查改,虽然单链表的结构简单,但是用起来却不是那么顺手.因此根据单链表的种种缺点,这篇博客所介绍的带头双向循环链表将会带来极大的优化. 上图就是带头双向循环链表的主 ...

  3. 【MySQL】增删查改CURD(基础版)

    目录 前言 一.新增 二.查询 1. 全列查找: 2. 指定列查询 3. 查询字段为表达式(一边查一边计算) 4. 查询:各列之间的计算 5. 起别名 6. 查询时进行去重: 7. 查询结果进行排序: ...

  4. 8天学通MongoDB——第二天 细说增删查改

    2019独角兽企业重金招聘Python工程师标准>>> 看过上一篇,相信大家都会知道如何开启mongodb了,这篇就细说下其中的增删查改,首先当我们用上一篇同样的方式打开mongod ...

  5. MERGE批量增删查改数据

    MERGE优点: 在批量处理数据的时候,我可以用到merge一次完成数据处理. 示例代码一: MERGE INTO student AS t using (SELECT '丽水' AS NAME,20 ...

  6. Django:数据库表的建立与增删查改(ForeignKey和ManytoMany)

    数据库表的创建: 1.Django工程项目建立,基础环境调试. 2.创建表 from django.db import models class Publisher(models.Model):    ...

  7. 【C++ 语言】vector 容器 ( 容器分类 | vector 声明 | vector 初始化 | vector 容器元素增删查改 )

    文章目录 序列式容器 vector 简介 vector ( 向量 ) 头文件 vector ( 向量 ) 声明及初始化 vector ( 向量 ) 添加元素 vector ( 向量 ) 查询元素 ve ...

  8. lr mysql 增删改查_Python对MySQL进行增删查改

    #增删查改 from Practice_Recode.UserTest.User importUserimportpymysqldefopenDb():globaldb, cursor db= pym ...

  9. 安卓后端mysql_后端Spring Boot+前端Android交互+MySQL增删查改(Java+Kotlin实现)

    1 前言&概述 这篇文章是基于这篇文章的更新,主要是更新了一些技术栈以及开发工具的版本,还有修复了一些Bug. 本文是SpringBoot+Android+MySQL的增删查改的简单实现,用到 ...

最新文章

  1. JAVA 线上故障排查完整套路!牛掰!
  2. jQuery 学习笔记一(认识jQuery jQuery选择器 jQuery中的DOM操作)
  3. android Intent onNewIntent 什么时候调用
  4. 高通 android平台LCD驱动分析
  5. c++动态链接库及静态链接库的生成与使用
  6. vuejs 过渡效果
  7. struts2学习笔记(常见错误)
  8. 家的味道,家的感觉!!!
  9. 信息安全工程师笔记-大数据安全威胁与需求分析
  10. MATLAB学习笔记——二维和三维绘图
  11. 企业域名备案流程_2021境外投资备案申报流程(办理企业境外投资证书注意事项)...
  12. java基础-多线程应用案例展示
  13. 嵌入式linux设计报告,嵌入式Linux程设计报告.doc
  14. 可道云访问服务器其他文件,可道云怎么用_可道云使用功能解析
  15. 关于无线传输功率和距离的问题
  16. k8s裸机安装Service使用LoadBalancer
  17. SpringBoot实现通过邮箱找回密码功能
  18. 遗传算法的c++语言程,遗传算法 C++的程序
  19. 散列函数设计:除留余数法
  20. 手机二维码扫码登录(Java源码及思路)

热门文章

  1. Java中读取属性文件以及做资源国际化
  2. Kettle使用_14 文件操作复制移动删除结合JS
  3. mysql 体系结构不匹配_指定的DSN包含驱动程序和应用程序之间的体系结构不匹配...
  4. Caffe-windows入门学习,编译、训练、测试详细教程
  5. 为什么要学习python
  6. bzoj 2705: [SDOI2012]Longge的问题——欧拉定理
  7. Java+大数据开发——HDFS详解
  8. 论理想中的技术团队——领导力
  9. Windows的Win键被自动按下解决方案
  10. Java程序员从笨鸟到菜鸟之(七十五)细谈struts2(十四)struts2+ajax实现异步验证...