首页 > 数据库 >mysql查询优化

mysql查询优化

时间:2023-09-27 17:56:09浏览次数:28  
标签:ci utf8mb4 ai 查询 0900 mysql 排序 优化

 最近出现一个问题,mysql历史月表的数据达到2000万左右的时候大概是16G,我们的历史月表有20多个字段。查询速度,非常的慢。

   为此,我们花费了一周的时间解决这个查询性能的问题。

   首先,我们把当前表的建表语句show了一下,发现字段默认的排序规则是:COLLATE=utf8mb4_0900_ai_ci,而开发建议书建议我们使用的字段编码和字段排序规则是:CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

   utf8mb4_0900_ai_ci的排序规则:

        utf8mb4_0900_ai_ci是mysql针对utf8mb4编码的排序规则。0900代表Unicode9.0的规范,ai表示accent insensitivity,也就是“不区分音调”,而ci表示case insensitivity,也就是“不区分大小写”。

        在比较字符时,utf8mb4_0900_ai_ci不仅会忽略大小写和重音符号,而且还能识别不同的Unicode字符。因此,它能更准确地比较字符,避免了诸如在utf8mb4_general_ci排序规则下的问题。

        然而,utf8mb4_0900_ai_ci的缺点是在某些情况下比utf8mb4_general_ci慢。所以,在实际情况中,可以根据应用程序的需求来选择适合的排序规则。

   utf8mb4_bin的排序规则:

        utf8mb4_bin的排序规则是二进制,他对字符串的每个字符都使用二进制数据进行编译和存储,且区分大小写。

这里我们按照开发建议书所有字段采用了utf8mb4_bin的排序规则。

   其次,明细月表中的时间字段样式为“2023-09-27 17:33:25.123” 样式,且时间字段采用的是varchar(40),这种设计方式,不如直接把字段类型改成char(23)更加的节省查询性能,因为在mysql中,char和varchar是两种常见

的字符串数据类型。它们的主要区别在于存储方式和性能。

       1.存储方式:

                 char:是固定长度的,指定了字段的长度后,不管实际存储的数据长度是多少,都会占用指定的空间。如果数据长度小于指定的长度,mysql会用空格来填充。

                  varchar:是可变长度的,只会占用实际数据长度加上1或2个字节(用于存储长度信息)。

        2.查询性能:

                char:由于char

标签:ci,utf8mb4,ai,查询,0900,mysql,排序,优化
From: https://www.cnblogs.com/wang9911-00/p/17733308.html

相关文章

  • 导入mysql文件报错
    mysql报错:「ERR」1273-Unknowncollation:'utf8mb4_0900_ai_ci'专注数据库知识分享2022-09-2719:05甘肃#MySQL专栏#mysql导入sql文件报错:[ERR]1273-Unknowncollation:'utf8mb4_0900_ai_ci'大致原因:sql对应的mysql版本高于当前要导入的mysql库的版本,引发......
  • mysql入门和高级教程概念
    入门教程MySQL是一个流行的开源关系型数据库管理系统,被广泛用于各种应用程序和网站开发中。以下是一个简单的MySQL教程,介绍了如何入门使用MySQL数据库:1.安装MySQL首先,您需要在计算机上安装MySQL数据库。您可以从MySQL官方网站下载适用于您的操作系统的MySQL安装程......
  • 外贸企业网站做谷歌SEO优化没转化怎么办?
    如果您的外贸企业网站在经过谷歌SEO优化后仍然没有获得预期的转化效果,这可能意味着您的优化策略需要重新审视和调整。以下是谷歌seo优化服务商九凌网络的一些建议,帮助您解决这个问题:1.重新定义目标关键词首先,确保您了解您的目标受众是谁,以及他们可能会搜索什么关键词来找到您的产......
  • MySQL limit用法
    1、Mysql的limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。 SELECT*FROMtableLIMIT[offset,]rows|rowsOFFSEToffset  LIMIT子句可以被用于强制SELECT语句返回指定......
  • MYSQL 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:未将对
    一:中文提示:连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:未将对象引用设置到对象的实例。DbType="MySql";ConfigId="".EnglishMessage:Connectionopenerror.未将对象引用设置到对象的实例。DbType="MySql";ConfigId="" 解决方法:在连接字......
  • 数据库 - MySQL转换SQL Server时,替换 FIND_IN_SET 函数引发的问题
    MySQL转换SQLServer时,替换FIND_IN_SET函数引发的问题 在之前的文章中,我列举出了一个当MySQL转换SQLServer时,FIND_IN_SET函数在SQLServer中的解决方案:链接 就是使用charindex(cast(匹配列asvarchar(50)),被匹配列(多个用,分开的值))<![CDATA[>]]>0替换MyS......
  • MySQL IFNULL函数
    MySQLIFNULL函数简介MySQLIFNULL函数是MySQL控制流函数之一,它接受两个参数,如果不是NULL,则返回第一个参数。否则,IFNULL函数返回第二个参数。两个参数可以是文字值或表达式。以下说明了IFNULL函数的语法: 1IFNULL(expression_1,expression_2); 如果expression_1不为NULL,则......
  • Kubernetes创建MysQL
    原文:https://www.cnblogs.com/wenkuna/p/16985512.html创建数据存储PV、PVC这里我们使用nfs作为storageclass,具体yaml文件如下:yaml#创建PVapiVersion:v1kind:PersistentVolumemetadata:name:mysqlspec:storageClassName:manualcapacity:storage:20Gi......
  • Dockerfile如何制作mysql镜像
    原文:https://blog.csdn.net/dwd22/article/details/130705146Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。1.编写dockerfile_mysql5.7在文件夹/root/dockerfile/mysql创建文件......
  • 动态规划——矩阵优化DP 学习笔记
    动态规划——矩阵优化DP学习笔记前置知识:矩阵、矩阵乘法。矩阵乘法优化线性递推斐波那契数列在斐波那契数列当中,\(f_1=f_2=1\),\(f_i=f_{i-1}+f_{i-2}\),求\(f_n\)。而分析式子可以知道,求\(f_k\)仅与\(f_{k-1}\)和\(f_{k-2}\)有关;所以我们设矩阵\(F_......