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

相关推荐

  • 分享win7下怎么启用mysql服务。

    您可以通过以下步骤在Windows 7上启用MySQL服务:,,1. 打开“服务”应用程序。,2. 在服务列表中查找“MySQL”。,3. 如果服务未启动,请右键单击该服务并选择“启动”。 MySQL简介 MySQL是一个关系型数据库管理系统,…

    2024年7月15日
    03
  • MySQL Date 函数

    MySQL DATE_FORMAT() 函数 定义和用法 DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。 语法 DATE_FORMAT(date,format) date 参数是合法的日期。(也可以一个日期格式的字段)format 规定日期/时间的输出格…

    2018年7月27日
    0199
  • 关于本机做mysql服务器怎么设置ip。

    在设置MySQL服务器的IP地址时,首先需要确保你已经正确安装了MySQL服务器,接下来,我将详细解释如何设置MySQL服务器的IP地址。 1、打开MySQL配置文件 MySQL配置文件通常位于以下路径: – Windows: `C:Progra…

    2024年7月13日
    00
  • 聊聊mysql 修改表编码。

    MySQL修改表编码:ALTER TABLE 表名 CONVERT TO CHARACTER SET 编码; MySQL怎么修改表编码 在MySQL中,表的编码是用于存储数据的字符集和排序规则,如果数据包含特殊字符或者需要进行特定语言的文本处理,那么就需…

    2024年7月21日
    03
  • 说说博客网站怎么选择虚拟主机。

    选择虚拟主机时,需要考虑以下几个方面:网站的规模、访问量、安全性、稳定性、技术支持等。如果您的博客网站访问量较大,建议选择独立主机或VPS;如果您的博客网站访问量较小,可以选择虚拟主机。还需要考虑虚拟主…

    2024年7月8日
    01
  • 经验分享MySQL轻松实现无排序分页。

    在MySQL中,我们经常需要对查询结果进行分页,通常情况下,我们会使用LIMIT和OFFSET关键字来实现这个功能,这种方法有一个问题,那就是如果数据量非常大,排序操作可能会非常耗时,有没有一种方法可以在不排序的情…

    2024年6月20日
    00
  • PHP与数据库安全性的集成。

    随着网络技术的不断进步,数据库已经成为了各种网站和应用程序的核心之一。为了确保数据库中的数据得到充分保护,开发人员必须确保他们的应用程序和数据库系统之间的集成是安全的。PHP是一种常用的编程语言,也是许…

    2023年5月21日
    00
  • 小编教你navicat基本操作。

    Navicat是一款强大的数据库管理工具,它提供图形界面用于轻松管理远程数据库。使用Navicat,我们可以进行连接数据库、操作数据库、导入备份、查询数据、修改用户信息等基本操作。它也支持查看数据库版本和SQL执行计…

    2024年7月5日
    01

联系我们

QQ:951076433

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