MySQL优化的最基础操作是什么

技术MySQL优化的最基础操作是什么这篇文章主要介绍“MySQL优化的最基础操作是什么”,在日常操作中,相信很多人在MySQL优化的最基础操作是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家

本文主要介绍“MySQL优化最基本的操作是什么”。在日常操作中,相信很多人对于MySQL优化最基本的操作是什么都有疑问。边肖查阅了各种资料,整理出简单易用的操作方法,希望能帮你解答“MySQL优化最基本的操作是什么”的疑惑!接下来,请和边肖一起学习!

优化思路

详细的MySQL优化步骤如下:

检查数据表结构,改进不完善的设计。

贯穿主营业务,收集常用数据库查询SQL。

通过分析SQL、适当拆分、添加索引等方式优化查询。

在优化SQL的同时优化代码逻辑。

添加本地缓存和redis缓存

尽可能不要使用NULL值

因为在创建表时,如果没有为创建的值设置默认值,MySQL会将默认值设置为NULL。那么为什么不用NULL呢?

这使得空索引的维护更加复杂,强烈建议为索引列设置NOT NULL。

不在!=当有空值时,等于负的条件查询返回的结果总是空的,查询容易出错。

空列需要一个额外的字节作为标志位来确定它是否为空。

当使用空值时,它可能与该列中的其他值不是同一类型,从而导致问题。(不同语言的不同表达)

MySQL很难优化对可空列的查询。

所以对于那些过去比较懒惰的字段,手动设置一个默认值,空字符串,0。

虽然这种方法对MySQL的性能提升不大,但这是一个好习惯,我们不应该忽略这些细节。

00-1010对于经常查询的字段,请添加索引。索引查询和未索引查询之间的速度差是十倍或更多。

通常,每个表都需要有一个主键id字段。

查询中常用的字段应该建立索引。

Varchar类型的字段,最好在建立索引时指定长度。

当查询中有多个条件时,优先选择带索引的条件。

LIKE条件等模糊搜索对字段索引无效,需要建立关键词索引来解决。

请尽量不要在数据库层面约束表和表之间的关系,这些表之间的依赖关系应该在代码级别解决。

当表与表之间存在约束时,虽然增删查的SQL语句变得简单,但负面影响是数据库在插入等操作时会检查约束(虽然可以手动设置忽略约束),相当于给数据库层写了一些业务逻辑,维护起来很不方便。

00-1010数据库中可以用整数表示的数据不应使用字符串类型。是使用varchar还是char取决于字段的可能值。

这种优化在数据库中有大量数据后往往是不可行的,最好在数据库设计之前就设计好。

对于那些可能值有限的列,请使用tinyint而不是VARCHAR。

例如,记录移动设备平台只有两个值:androi。

d,ios,那么就可以使用0表示android,1表示ios,这种列一定要写好注释

  • 为什么不用ENUM呢?ENUM扩展困难,比如后来移动平台又增加了一个ipad,那岂不是懵逼了,而tinyint加个2就行,而且ENUM在代码里面处理起来特别奇怪,是当成整形呢还是字符串,各个语言不一样。

  • 这种方式,一定要在数据库注释或者代码里面写明各个值的含义

  • 对于那些定长字符串,可以使用char,比如邮编,总是5位

  • 对于那些长度未知的字符串,使用varchar

  • 不要滥用bigint,比如记录文章数目的表id字段,用int就行了,21亿篇文章上限够了

  • 适当打破数据库范式添加冗余字段,避免查询时的表连接

  • 查询的时候,肯定int类型比varchar快,因为整数的比较直接调用底层运算器就可以实现,而字符串比较要逐个字符比较。

    定长数据比变长数据查询快,因为比较定长数据与数据之间的偏移是固定的,很容易计算下一个数据的偏移。而变长数据则还需要多一步去查询下一个数据的偏移量。不过。定长数据可能会浪费更多的存储空间。

    大表拆分

    对于那些数据量可能近期会超过500W或者增长很快的表,一定要提前做好垂直分表或者水平分表,当数据量超过百万以后,查询速度会明显下降。

    分库分表尽量在数据库设计初期敲定方案,否则后期会极大增加代码复杂性而且不易更改。

    垂直分表是按照日期等外部变量进行分表,水平分表是按照表中的某些字段关系,使用hash映射等分表。

    分库分表的前提条件是在执行查询语句之前,已经知道需要查询的数据可能会落在哪一个分库和哪一个分表中。

    优化查询语句

    这个才是很多系统数据库瓶颈的始作俑者。

    • 请尽量使用简单的查询,避免使用表链接

    • 请尽量避免全表扫描,会造成全表扫描的语句包括但不限于:

      • where子句条件恒真或为空

      • 使用LIKE

      • 使用不等操作符(<>、!=)

      • 查询含有is null的列

      • 在非索引列上使用or

    • 多条件查询时,请把简单查询条件或者索引列查询置于前面

    • 请尽量指定需要查询的列,不要偷懒使用select *

      • 如果不指定,一方面会返回多余的数据,占用带宽等

      • 另一方面MySQL执行查询的时候,没有字段时会先去查询表结构有哪些字段

    • 大写的查询关键字比小写快一点点

    • 使用子查询会创建临时表,会比链接(JOIN)和联合(UNION)稍慢

    • 在索引字段上查询尽量不要使用数据库函数,不便于缓存查询结果

    • 当只要一行数据时,请使用LIMIT 1,如果数据过多,请适当设定LIMIT,分页查询

    • 千万不要 ORDER BY RAND(),性能极低

    添加缓存

    使用redis等缓存,还有本地文件缓存等,可以极大地减少数据库查询次数。缓存这个东西,一定要分析自己系统的数据特点,适当选择。

    • 对于一些常用的数据,比如配置信息等,可以放在缓存中

    • 可以在本地缓存数据库的表结构

    • 缓存的数据一定要注意及时更新,还有设置有效期

    • 增加缓存务必会增加系统复杂性,一定要注意权衡

    到此,关于“MySQL优化的最基础操作是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

    内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/94372.html

    (0)

    相关推荐

    • 什么绿什么红,红、白、绿萝卜的主要不同吃法

      技术什么绿什么红,红、白、绿萝卜的主要不同吃法红萝卜炖菜什么绿什么红、做馅、做汤白萝卡做汤绿萝淹咸菜、晒干做咸菜。你好!
      红、白萝卜常用来烧菜、做馅。北方人吃红白萝卜的方法,除了炖萝卜、做馅以外,最多的,是和牛羊肉一块炖

      生活 2021年10月21日
    • 氯气和氢氧化钠反应离子方程式,氢氧化钠与氯气的化学反应方程式

      技术氯气和氢氧化钠反应离子方程式,氢氧化钠与氯气的化学反应方程式氢氧化钠与氯气的化学反应方程式氯气和氢氧化钠反应离子方程式: Cl2+2NaOH=NaCl+NaClO(次氯酸钠)+H2O 氢氧化钠,化学式为NaOH,俗称

      生活 2021年10月23日
    • java中如何实现生成器和迭代器

      技术java中如何实现生成器和迭代器小编给大家分享一下java中如何实现生成器和迭代器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!print

      攻略 2021年11月23日
    • 任劳任怨的意思,默默无闻任劳任怨是什么意思

      技术任劳任怨的意思,默默无闻任劳任怨是什么意思【拼音】任劳任怨的意思:mò mò wú wén【释义】:无声无息,没人知道。指没有什么名声。
      【出处】:《晋书·祖纳传》:“仆虽无无,非志不立,故疾没世而无闻焉。”
      【例句

      生活 2021年10月23日
    • 罗马数字0,在罗马数字中,零该怎么写

      技术罗马数字0,在罗马数字中,零该怎么写罗马数字起源于古罗马.一共有7个数字符:I,V,X,L,C,D,M
      相应的阿拉伯数字表示为:
      1,5,10,50,100,500,1000
      用罗马数字表示数时,如果几个相同的数字并

      生活 2021年10月26日
    • springboot怎么保证事务隔离(springboot如何控制事务)

      技术Springboot在有锁的情况下怎么正确使用事务这篇文章主要介绍“Springboot在有锁的情况下怎么正确使用事务”,在日常操作中,相信很多人在Springboot在有锁的情况下怎么正确使用事务问题上存在疑惑,小

      攻略 2021年12月17日