PHP增删查改性能优化
需求:数据加载慢(卡)
其实是SQL的优化
学习路线:
(选择数据库)-》业务分析(表,字段)-》逻辑设计(范式-》关系表,反范式-》宽表)
-》物理设计(选择存储引擎》数据类型》对象命名-》建立库表)
-》索引优化(慢查询-》执行计划)
-》SQL改写
-》事务ACID(由于高并发-》产生阻塞,死锁)
-》高可用,高可扩展(集群,负载均衡,主从复制,读写分离,分库分表(水平分割,垂直分割))
一,数据库:MySQL
二,业务分析:根据项目需求,得出需要创建的表,每个表应该有什么字段
三,逻辑设计:
三大范式:
- 单个字段不能再分。如:联系方式-》拆分-》手机,微信,QQ。。。
- 非主键字段必须依赖主键(有主键才有非主键,人在塔在)
- 非主键之间不能相互依赖(女朋友和小三不兼容)
- 优点:减少数据冗余
- 缺点:增加关联,产生关系表
反范式:根据业务需要,把需要的数据放进表中。
- 优点:减少关联表(运用:1:N关系,将1中适当的字段放进N中)
- 缺点:泛用使数据冗余,产生宽表
宽表:将所有字段放一个表中
关系表:两个表的关联
四,物理设计
存储引擎:INNODB
数据类型:
- 优先使用字节小的类型(timestamp代替datetime,字符串转整型存储,varchar代替text)
- 精度用decimal
- 不为NULL
对象命名:
- 包含库名
- 小写+下划线
- 不使用保留字
- 见名识义
- 相同数据列,列名和数据类型一致
- 临时表tmp,备份表bak前缀,日期为后缀
建立库表:DDL语句
五,索引优化:索引=目录,更快查询。常用主键,普通索引,唯一索引,联合索引
- 索引不是越多越好
- where,on/using,group,order,distinct中加索引(order by NULL:不进行文件排序)
- 索引列不能使用表达式和函数
- NOT IN和<>不能使用索引
- 范围查询的右边列不能使用索引
- order中全部列,group和order在一个表中
- 联合索引顺序:只能从最左侧使用索引,且不能跳过其中一列
- 覆盖索引:select,where中的列都是索引
- 前缀索引:一段字符串的最前一部分作为索引。唯一性越高越好,但不能过多
六,SQL改写
- 使用join或CTE(8.0的公共表表达式)代替子查询
- 大SQL改小SQL
- 巧用计算列
- 使用limit,field,count(*)
- 汇总表
- 缓存数据
附录:
2.MVC(封装),解耦合(相关理解耦合度)
3.对于修改数量的计算,封装成一个统计方法
,每次如果涉及到修改,调用一下这个方法
。
4.多个类中都用到的API,封装到common控制器中
PHP增删查改性能优化相关推荐
- mysql索引使增删变慢_mysql优化之索引篇
mysql,对it打工人,这个几乎是必备的技能之一.mysql可以解决我们平时工作中的大量的.有关增删查改的问题.所以想深入了解mysql,我觉得关键在于他的增删查改背后的算法,开搞. 面对增删查改等 ...
- 数据结构-带头双向循环链表(增删查改详解)
在上一篇博客中,详细介绍了单链表的增删查改,虽然单链表的结构简单,但是用起来却不是那么顺手.因此根据单链表的种种缺点,这篇博客所介绍的带头双向循环链表将会带来极大的优化. 上图就是带头双向循环链表的主 ...
- 【MySQL】增删查改CURD(基础版)
目录 前言 一.新增 二.查询 1. 全列查找: 2. 指定列查询 3. 查询字段为表达式(一边查一边计算) 4. 查询:各列之间的计算 5. 起别名 6. 查询时进行去重: 7. 查询结果进行排序: ...
- 8天学通MongoDB——第二天 细说增删查改
2019独角兽企业重金招聘Python工程师标准>>> 看过上一篇,相信大家都会知道如何开启mongodb了,这篇就细说下其中的增删查改,首先当我们用上一篇同样的方式打开mongod ...
- MERGE批量增删查改数据
MERGE优点: 在批量处理数据的时候,我可以用到merge一次完成数据处理. 示例代码一: MERGE INTO student AS t using (SELECT '丽水' AS NAME,20 ...
- Django:数据库表的建立与增删查改(ForeignKey和ManytoMany)
数据库表的创建: 1.Django工程项目建立,基础环境调试. 2.创建表 from django.db import models class Publisher(models.Model): ...
- 【C++ 语言】vector 容器 ( 容器分类 | vector 声明 | vector 初始化 | vector 容器元素增删查改 )
文章目录 序列式容器 vector 简介 vector ( 向量 ) 头文件 vector ( 向量 ) 声明及初始化 vector ( 向量 ) 添加元素 vector ( 向量 ) 查询元素 ve ...
- lr mysql 增删改查_Python对MySQL进行增删查改
#增删查改 from Practice_Recode.UserTest.User importUserimportpymysqldefopenDb():globaldb, cursor db= pym ...
- 安卓后端mysql_后端Spring Boot+前端Android交互+MySQL增删查改(Java+Kotlin实现)
1 前言&概述 这篇文章是基于这篇文章的更新,主要是更新了一些技术栈以及开发工具的版本,还有修复了一些Bug. 本文是SpringBoot+Android+MySQL的增删查改的简单实现,用到 ...
最新文章
- JAVA 线上故障排查完整套路!牛掰!
- jQuery 学习笔记一(认识jQuery jQuery选择器 jQuery中的DOM操作)
- android Intent onNewIntent 什么时候调用
- 高通 android平台LCD驱动分析
- c++动态链接库及静态链接库的生成与使用
- vuejs 过渡效果
- struts2学习笔记(常见错误)
- 家的味道,家的感觉!!!
- 信息安全工程师笔记-大数据安全威胁与需求分析
- MATLAB学习笔记——二维和三维绘图
- 企业域名备案流程_2021境外投资备案申报流程(办理企业境外投资证书注意事项)...
- java基础-多线程应用案例展示
- 嵌入式linux设计报告,嵌入式Linux程设计报告.doc
- 可道云访问服务器其他文件,可道云怎么用_可道云使用功能解析
- 关于无线传输功率和距离的问题
- k8s裸机安装Service使用LoadBalancer
- SpringBoot实现通过邮箱找回密码功能
- 遗传算法的c++语言程,遗传算法 C++的程序
- 散列函数设计:除留余数法
- 手机二维码扫码登录(Java源码及思路)
热门文章
- Java中读取属性文件以及做资源国际化
- Kettle使用_14 文件操作复制移动删除结合JS
- mysql 体系结构不匹配_指定的DSN包含驱动程序和应用程序之间的体系结构不匹配...
- Caffe-windows入门学习,编译、训练、测试详细教程
- 为什么要学习python
- bzoj 2705: [SDOI2012]Longge的问题——欧拉定理
- Java+大数据开发——HDFS详解
- 论理想中的技术团队——领导力
- Windows的Win键被自动按下解决方案
- Java程序员从笨鸟到菜鸟之(七十五)细谈struts2(十四)struts2+ajax实现异步验证...