美文网首页修炼之旅sqlmysql
mysql数据库优化(sql语句优化)

mysql数据库优化(sql语句优化)

作者: 机智的老刘明同志 | 来源:发表于2018-08-06 19:23 被阅读733次

        整理这篇文档也算是有感而发,起因就是染布生产进度大约5W多条数据,每次导出为excel表格的时候服务器上的cpu压力爆满,而项目的架构又从源头上限制了从硬件层面上优化,故本篇文章仅仅从sql语句的写法上和数据表的设计上对mysql的性能进行优化。

结论1:框架自带的模型查询比原生的sql要慢很多(成立)

            这里我们通过microtime()函数来获取执行sql查询所需要的时间 

laravel自带的sql查询 查询时间为5.29秒 原生sql语句 查询时间为0.29秒

    通过上图的两条sql运行时间,我们可以明显的看出框架自带的查询耗时大约5.29秒,而原生的sql只需要0.29秒.

结论2:最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库(待定)

        测试的数据库中 actual_scheduling_bacth的数据类型是varchar(255)

        $sql ="select * from `dye_production_schedules` where `actual_scheduling_bacth` is null";

        sql执行时间为0.59701204299927秒

        $sql ="select * from `dye_production_schedules` where `actual_scheduling_bacth` = 0";

        sql执行时间为0.62539100646973秒

        对于varchar 字段来说 null 是不占用任何空间的,查询起来反而还要快,因此像评论或者描述这些我们可以用null,其他的并不推荐,但是对于char(100)来说,哪怕是null也会占用100字节空间

3.应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描(成立)

        对于上面两条sql来说

        id != 6055  的sql执行时间为0.54877090454102秒

        id>6055 or id<6055 的sql执行时间为0.0015900135040283秒

4.应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描(待定)

        $sql1="select id from `dye_production_schedules` where id >  1666 and order_detail_id = 6891";

        $sql2 ="select id from `dye_production_schedules` where id > 1666  union all select id from `dye_production_schedules` where order_detail_id = 6891";

        好吧$sql2反而还慢

5.in 和 not in 也要慎用,否则会导致全表扫描(待定)

    对于连续的数值,能用 between 就不要用 in 了:

        $sql1 ="select id from `dye_production_schedules` where product_id in (2401,2402.2403)";

        $sql2 ="select id from `dye_production_schedules` where product_id between 2400 and 2404";

    好吧这两条执行速度极为相近  sql执行时间为0.00124192237854秒

6.%abc%的查询也将导致全表扫描

    select id from t where name like‘%abc%’

7. sql子句中尽量不要进行函数操作,表达式操作

.8Update 语句,如果只更改1、2个字段,不要Update全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志。

8.尽可能的使用 varchar 代替 char ,

    因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

9.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

10尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。

        批量处理数据(可分批向缓存中存贮)避免数组盛放过多的数据 给服务器造成巨大的压力

相关文章

  • SQL语句优化, since 2022-04-22

    (2022.04.22 Fri)SQL语句的优化目的在于提高SQL语句的运行效率。注意SQL优化和数据库优化的区别...

  • 阿里新产MySQL性能优化实践笔记,GitHub已获千万推荐

    本书只想解决MySQL数据库性能这么一个“小问题”!数据库的性能优化首先是计算机系统的优化、其次是SQL语句的优化...

  • 慢查询

    含义:可以让mysql记录一些查询超过限定时间的语句,通过开启慢查询,优化SQL语句进而优化数据库系统的性能。 参...

  • MySQL优化框架

    1,SQL语句优化 2,索引优化 3,数据库结构优化 4,InnoDB表优化 5,MyISAM表优化 6,Memo...

  • MySQL数据库与SQL优化

    一、MySQL数据库 - SQL优化 MySQL DBMS - MySQL Database Management...

  • 千万级MySQL数据库建立索引,提高性能的秘诀

    实践中如何优化MySQL 实践中,MySQL的优化主要涉及SQL语句及索引的优化、数据表结构的优化、系统配置的优化...

  • MYSQL优化 Analyze Table

    Analyze Table(分析表) MySQL 的Optimizer(优化元件)在优化SQL语句时,首先需要收集...

  • MySQL查询优化(分析、索引、配置等)

    数据库的优化包括两个方面,一是SQL语句的优化,二是数据库服务器和配置的优化。下面先讲查询语句的优化。 查询语句优...

  • face19 mysql查询优化

    mysql查询优化 sql语句优化的一些方法 先说明如何定位低效sql语句,然后根据低效原因做排查,先从索引着手,...

  • Mysql数据库优化

    数据库优化顺序:Sql及索引->数据库表结构->系统配置->硬件 第一章:Sql语句优化 如何判断有问题Sql? ...

网友评论

本文标题:mysql数据库优化(sql语句优化)

本文链接:https://www.haomeiwen.com/subject/dvbwvftx.html