• Mysql优化整理(持续更新)


    1.尽可能不使用OR,因为OR会导致数据库引擎放弃索引进行全表扫描。我们应该使用UNION

    比如我们想要查询17岁和70岁的人,他就会有不同的查询方式

    优化前:

    select * from a where age =17 OR age =70

    优化后:

    SELECT * FROM a WHERE age = 17 UNION SELECT * FROM a WHERE age = 70

    2.查询时where语句越左边放越苛刻的条件,因为Mysql是从左到右执行的,先过滤到多的数据,后面只是在少量数据中查询

    举例: 假如是初中生,查询年龄是15岁,并且性别是男生。一般性别是55开或者46开,一般年龄差距在三岁之间,差不多该岁数会占三分之一。很明显根据年龄能排除更多的数据

    select * from student where age = 15 and sex = '男'

    3.避免进行空值判断,尽可能在插入时进行初值赋予,查询时判断初值

    优化前:

    select * from student where score is null

     优化后:

    1. insert into student(name,....,score) values('小明',....,0)
    2. select * from student where score = 0

    4.在多表查询时,使用表别名,避免拿着列名去各个表匹配

    select s.*,t.* from student s,teacher t where s.tid = t.id

    5.模糊搜索尽量避开头搜索

    select * from student where name like '王%'

    6.尽量不适用select *

            ①减少不必要字段的查询,多余的字段只会浪费内存,给CPU增加不必要的麻烦,在网络交互时,也会增加麻烦。

            ②Mysql在处理大字段时(text,longtext,blob等等),会先把超出的数据序列化到另外一个地方,如果我们查询的字段中有不需要的字段,就会出现多一次I/O操作的情况。

            ③select *直接使得此次查询失去覆盖索引的可能性,简单的介绍一下覆盖索引:在我们进行查询时,会有一些索引,也就是我们where后面的条件,我们查询的规则时,现根据条件,查询符合规则的索引列,然后再查到想要的列的数据。但是当我们想要的数据和索引列相同时,就会舍去第二次那个查询数据的过程,提高我们查询的效率。

    7.多表联查时,小表放前,大表放后,与2性质相同。Mysql都是从左向右查的,第一个表需要扫描全表,但是后续的表,会根据条件来查询部分数据。

    8.避免使用uuid,尽可能使用自增整型当作主键。当使用uuid时,mysql会自己创建一个隐藏的自增整型。我们数据库的资源是很宝贵的,不要导致出现多余的字段。

            

  • 相关阅读:
    【代码精读】中断路由代码导读:当cpu运行在ATF来了一个Group0中断
    【MySQL从入门到精通】【高级篇】(十二)InnoDB数据存储结构概述
    【AWS系列】第八讲:AWS Serverless之S3
    数据分析——对比思维、A/B test
    05 函数的极限考点分析
    Git的版本控制(查看文件内容和文件的变化状态、版本日志、版本回退以及找回覆盖的版本等)
    java代理模式教你中间商赚差价
    GitHub【入门】从入门到会用(千字总结●超详细)
    常用工具类Commons-Configuration2简介
    Metabase学习教程:仪表盘-5
  • 原文地址:https://blog.csdn.net/a2321123/article/details/126776257