浅谈Mysql常见注意事项一

浅谈Mysql常见注意事项一

  1. 不要在Mysql中使用utf8

    Mysql中utf8并不是真正意义上的utf8,而是指的是utf8mb3,这种字符集仅支持BMP字符,码位在0到65535之间,不支持一些补充字符,例如一些生僻字和emoji表情。utf8mb3是Mysql早期就支持的字符集,由于不支持补充字符,Mysql在5.5.3之后的版本里面增加了utf8mb4的编码。在未来Mysql版本中,可能会删除utf8mb3字符集。utf8mb4支持BMP和补充字符,对于BMP字符,utf8mb4和utf8mb3相同,但是对于补充字符,utf8mb4需要4个字节存储,utf8mb3每个字符最多使用3个字节,无法存储该字符,所以在创建表,使用utf8mb4,而不是utf8或者utf8mb3。

    字符集支持的字符每个字符存储需要的字节
    utf8mb3、utf8(deprecated)BMP1~3字节
    ucs2BMP2字节
    utf8mb4BPM和补充字符1~4字节
    utf16BMP和补充字符2字节或4字节
    utf16leBMP和补充字符2字节或4字节
    utf32BMP和补充字符4字节

    Mysql官方文档说明:https://dev.mysql.com/doc/refman/8.0/en/charset-unicode.html

  2. 小数类型使用decimal

    推荐使用decimal,不建议使用float和double,float和double会有精度丢失的问题,并且在比较值或者进行减法运算时可能会出现问题。decimal是定点数,在MySQL中,定点数是以字符串形式存储,所以在精度要求比较高时,推荐使用decimal类型。如果存储的数据超出decimal访问时,可以将数据按照整数和小数分开存储。

    数据类型说明存储字节
    float单精度浮点数4个字节
    double双精度浮点数8个字节
    decimal(M, D),M默认值是10压缩的"严格"定点数根据M和D而定

    官网decimal存储字节表格

    Leftover DigitsNumber of Bytes
    00
    1-21
    3-42
    5-63
    7-94

    decimal存储字节计算:Mysql是将每9位十进制存储为4个字节。

    例如:以官网例子为例

    decimal(18, 9):小数部分是9,需要4个字节,整数部分也是9,也需要4个字节。

    decimal(20, 6): 小数部分是6,需要3个字节,整数部分是14,14-9=5,整数部分需要4个字节+剩余的5个存储需要的3个字节。

  3. 推荐统计值使用count(*)

    在阿里JAVA开发手册中推荐使用count(*),不要使用count(列名),count(常量)。count(列名)会查询符合条件的并且列的值不为NULL的行数,也就是说会过滤掉列为NULL的行,除非有特殊的需求,所以一般不要使用。count(*)在MySQL8.0.13之后对SELECT COUNT(*) FROM tbl_name进行了优化,效率得到提升。InnoDB引擎count(*)和count(1)其实是一样的,不存在谁快谁慢的问题,不过推荐使用count(*),符合SQL92定义的标准统计行数的语法。以下附上官网关于count(*)的说明及链接,感兴趣的小伙伴可以研究研究官方文档。

    MySQL官方文档说明:https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html#function_count

    As of MySQL 8.0.13, SELECT COUNT(*) FROM tbl_name query performance for InnoDB tables is optimized for single-threaded workloads if there are no extra clauses such as WHERE or GROUP BY.

    InnoDB handles SELECT COUNT(*) and SELECT COUNT(1) operations in the same way. There is no performance difference.

原文链接:https://monkey.blog.xpyvip.top/archives/qian-tan-mysql-chang-jian-zhu-yi-shi-xiang-yi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL的存储引擎是插件式的,其中最常用的两个存储引擎是MyISAM和InnoDB。MyISAM是MySQL中默认的存储引擎,它没有太多人关注的原因可能是因为它在一些方面的性能和功能上相对较弱。然而,决定使用哪个存储引擎是一个复杂的问题,而我们可以聚焦于MyISAM和InnoDB这两个最常见的存储引擎。 在这两个存储引擎中,InnoDB要求表必须有主键,因为它的数据文件本身按照主键聚集。而MyISAM可以没有主键。这是InnoDB与MyISAM之间的一个重要区别。 因此,当选择MySQL的存储引擎时,我们需要考虑不同存储引擎的特性和适用场景,以便根据需求选择最合适的存储引擎。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [浅谈MySQL存储引擎](https://blog.csdn.net/hanfeng529264/article/details/123352215)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [浅谈MySQL存储引擎选择 InnoDB与MyISAM的优缺点分析](https://download.csdn.net/download/weixin_38655484/12834006)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值