MySQL大表优化方案之表单优化(推荐一)

MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化:

单表优化

除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量:

字段

  • 尽量使用TINYINTSMALLINTMEDIUM_INT作为整数类型而非INT,如果非负则加上UNSIGNED
  • VARCHAR的长度只分配真正需要的空间
  • 使用枚举或整数代替字符串类型
  • 尽量使用TIMESTAMP而非DATETIME
  • 单表不要有太多字段,建议在20以内
  • 避免使用NULL字段,很难查询优化且占用额外索引空间
  • 用整型来存IP

索引

  • 索引并不是越多越好,要根据查询有针对性的创建,考虑在WHEREORDER BY命令上涉及的列建立索引,可根据EXPLAIN来查看是否用了索引还是全表扫描
  • 应尽量避免在WHERE子句中对字段进行NULL值判断,否则将导致引擎放弃使用索引而进行全表扫描
  • 值分布很稀少的字段不适合建索引,例如"性别"这种只有两三个值的字段
  • 字符字段只建前缀索引
  • 字符字段最好不要做主键
  • 不用外键,由程序保证约束
  • 尽量不用UNIQUE,由程序保证约束
  • 使用多列索引时主意顺序和查询条件保持一致,同时删除不必要的单列索引

查询SQL

  • 可通过开启慢查询日志来找出较慢的SQL
  • 不做列运算:SELECT id WHERE age + 1 = 10,任何对列的操作都将导致表扫描,它包括数据库教程函数、计算表达式等等,查询时要尽可能将操作移至等号右边
  • sql语句尽可能简单:一条sql只能在一个cpu运算;大语句拆小语句,减少锁时间;一条大sql可以堵死整个库
  • 不用SELECT *
  • OR改写成INOR的效率是n级别,IN的效率是log(n)级别,in的个数建议控制在200以内
  • 不用函数和触发器,在应用程序实现
  • 避免%xxx式查询
  • 少用JOIN
  • 使用同类型进行比较,比如用'123''123'比,123123
  • 尽量避免在WHERE子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描
  • 对于连续数值,使用BETWEEN不用INSELECT id FROM t WHERE num BETWEEN 1 AND 5
  • 列表数据不要拿全表,要使用LIMIT来分页,每页数量也不要太大

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/4595.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
上一篇 2018年3月9日 16:41
下一篇 2018年3月10日 16:35

相关推荐

  • PHP与数据库Kubernetes化的集成。

    随着云计算和容器化技术的发展,Kubernetes已经成为了当今最流行的容器编排平台之一。Kubernetes提供了高度可扩展性、强大的部署和管理功能,并且越来越受到开发人员和企业的青睐。本文将会讨论如何将PHP应用与数...

    2023年5月21日
    00
  • PHP与数据库调试的集成。

    随着互联网技术的快速发展,PHP成为了目前Web开发中最受欢迎的编程语言之一。PHP不仅具有易学易用、可扩展性强、社区活跃等优点,还能与各种数据库进行集成。然而,在实际开发过程中,调试PHP与数据库之间的交互...

    2023年5月21日
    02
  • PHP实现MySQL数据库负载均衡的方法。

    在高并发的情况下,单个服务器无法承受所有的请求,因此需要将请求分散到不同的服务器上进行处理,这就是负载均衡的概念。MySQL作为一种常用的数据库管理系统,也需要负载均衡来提高其性能和可靠性。本文将介绍如...

    2023年5月21日
    05
  • PHP与数据库异步处理的集成。

    随着互联网技术的不断发展,Web应用程序已经成为互联网世界中最重要的组成部分之一。而PHP作为Web开发的一种开源脚本语言,其在Web应用程序开发中日益重要。在大多数Web应用程序中,数据处理是一个必不可少的环节...

    2023年5月21日
    06
  • 重蔚自留地php学习第四十天——php操作数据库教程

    PHP操作mysql PHP要操作mysql,而mysql是c/s结构的软件,所以PHP需要充当一个客户端的角色。 PHP本身没有操作mysql数据库的能力,但是PHP提供了一个操作数据库的扩展。从而实现了PHP操作各种各样的数据库。 &nbsp...

    2018年10月26日 PHP自学教程
    0333
  • PHP数据库连接文件代码

    对于PHP程序而言,要经常访问某数据库时,可以将与该数据库的连接过程写成一个PHP文件,每次需要连接数据库时直接调用该文件即可。、 例: conn.php:   在别的文件中,每次连接数据库时时,只需要在文件中调...

    2018年10月3日
    0215
  • Mysql常用命令合集(详细)

    Mysql常用命令 show databases; 显示数据库 create database name; 创建数据库 use databasename; 选择数据库 drop database name 直接删除数据库,不提醒 show tables; 显示表 describe tablename; 显示具体的表...

    2018年1月30日
    0184
  • 看懂这篇文章,你就懂了数据库死锁产生的场景和解决方法

    一、什么是死锁加锁(Locking)是数据库在并发访问时保证数据一致性和完整性的主要机制。任何事务都需要获得相应对象上的锁才能访问数据,读取数据的事务通常只需要获得读锁(共享锁),修改数据的事务需要获得写...

    2023年5月10日 编程分享
    014

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息