第一篇是最基础,同样也是最重要的Sql语句的优化。就和炒菜一样,假如我们的原材料,例如青菜或者肉是坏了的,即便我们拥有手艺一流的厨子,品质保证的厨具,也不可能做出美味的佳肴。所以,不仅要有好厨师好厨具,更要有好原料!而我们今天要讲的就是美味佳肴的基本:原材料,也就是Sql语句!

常见的Sql语句优化主要有以下几种:

  1.  避免SELECT * 查询;

一方面,若我们动态SQL列引用 ‘*’ ,数据库在解析的过程中,会将“*” 依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间。另一方面,SELECT * 会将被查询表的全部字段(假如有30个字段)内容显示出来,即便可能我们仅仅需要的只有5个字段。尤其是在其他25个字段中还有text等类型的字段时,必然浪费了我们很多不必要的时间,查询出了很多不必要的数据。所以,最根本的,一定要避免SELECT *查询。

   2. 嵌套查询和连接查询;

在一个SELECT语句的WHERE字句或HAVING字符中嵌套另一个SELECT语句的查询,称为嵌套查询。被嵌套的称为子查询,子查询还可以嵌套。但是我们应该尽量少使用嵌套查询,嵌套查询的效率要比连接查询低很多,而且在嵌套查询中,索引是不起作用的。

   3. 建立索引;

对查询进行优化,应该避免全表扫描,首先应该考虑在where及order by涉及的列上建立索引(具体索引的使用会再以后的文章中专门讲述)。但是建立索引之后也不能掉以轻心的,我们还是需要注意我们的sql语句的编写,因为在以下这几种情况,引擎会放弃索引而进行全表扫描,换言之,我们建立的为了提高效率的索引就不起作用了,所以我们应该尽量避免以下这些情况:

a)  在where子句中使用!=或<>操作符;

b)  在where字句中对字段进行null值判断,如;

select id from t where score is null;

如果我们需要这种为空的判断,可以在score上设置默认值为0,确保表中score列没有null值,然后这样查询:

select id from t where score = 0;

c)  使用where.. or ..或者where.. and ..连接查询条件时,若or或者and两边所有列中有一列没有加索引,则所有索引不起作用

d)  使用like查询时,%在第一位置,如

select id from t where name like “%abc”;

   4. 绝对不要轻易使用order by rand(),很可能导致mysql的灾难;

   5. 使用批量插入

插入多条记录时,可以使用一条INSERT语句插入一条记录,也可以使用一条INSERT语句插入多条记录。

第一种情况:

INSERT INTO emp(id,name) VALUES (1,'suse');

INSERT INTO emp(id,name) VALUES (2,'lily');

第二种情况

        INSERT INTO emp(id,name) VALUES (1,'suse'),(2,'lily');

当插入数据量大时,使用第二种情况会比第一次情况快很多,因为第二种情况明显减少了与数据库连接的次数。

最后说一说EXPLAIN和desc

   6. 使用LOAD DATA INFILE批量导入

当需要批量导入数据时,如果能用LOAD DATA INFILE语句,就尽量使用。因为LOAD DATA INFILE语句导入数据的速度比INSERT语句快很多。导出亦然,可用OUTFILE时就用。

说到了sql语句的优化,顺便说一下关于数据库结构的优化吧。一个好的数据库设计方案对于数据库的性能常常起到事半功倍的效果。数据库结构的设计需要考虑数据冗余、查询和更新速度、字段的数据类型是否合理等多方面。

   (1)将字段很多的表拆分成多个表

有时候有些字段使用频率很低或者字段的数据类型比较大,那么可以考虑垂直拆分的方法,把不常用的字段和大字段拆分出去;

   (2)增加中间表

对于需要经常联合查询的表,可以建立中间表以提高查询效率。通过建立中间表,把需要经常联合查询的数据插入到中间表中,然后将原来的联合查询改为对中间表的查询,以此来提高查询效率。

   (3)增加冗余字段

设计数据库表时应尽量遵循范式理论,尽可能减少冗余字段,但是现今存储硬件越来越便宜,有时候查询数据的时候需要join多个表,这样在高峰期间会影响查询的效率,我们需要反范式而为之,增加一些必要的冗余字段,以空间换时间。这样做会增加开发的工作量和维护量,但是如果能换来可观的性能提升,这样做也是值得的

这是比较常用的几种sql语句和数据库设计的优化,暂时先说这么多,后续可继续补充~

说完Sql语句的优化,我们可以发现其中一大点就是索引了,在下一篇文中中,我将为大家详细介绍关于索引的使用!

Mysql优化(一)—Sql语句相关推荐

  1. mysql 执行顺序 SQL语句执行顺序分析

    最近在做一个数据库的大作业,算是复习了下MySql里面比较复杂的一些语句的用法,如Left Join之类的.在这里就不对具体语法进行记录了,希望能在以后经常用到,而不是隔好长时间用一次.在这里就记录下 ...

  2. 3mysql优化之SQL语句调优

    文件在:E:\学习文档子目录压缩\数据库\mysql\mysql优化\蚂蚁\蚂蚁1\3mysql优化之SQL语句调优 或 我的网盘\我的笔记\学习文档子目录压缩\数据库\mysql\mysql优化\蚂 ...

  3. MySQL 简介及SQL 语句

    MySQL 简介及SQL 语句 一.数据库概述 1.数据库的分类 1)区别 2.MySQL 概述 3.MySQL 存储原理 二.部署 MySQL 数据库 1.安装 MySQL 数据库 2.优化调整 M ...

  4. MySQL数据库:SQL语句

    MySql数据库系列阅读 MySQL数据库 MySQL数据库:SQL语句 MySQL数据库:完整性约束 MySQL数据库备份与还原 MySQL数据库:编码 1. SQL概述 1.1 什么是SQL SQ ...

  5. mysql中利用sql语句修改字段名称,字段长度等操作(亲测)

    在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或字段的注释,把同字段属性调整到一块儿.这些操作可以在phpmyadmin或者别的m ...

  6. php 登陆 sql语句,PHP 连接MySQL数据库的SQL语句的简单示例

    这篇文章主要为大家详细介绍了PHP 连接MySQL数据库的SQL语句的简单示例,具有一定的参考价值,可以用来参考一下. 首先用phpmyadmin进入建立数据库user 再建个三段的表admin 再别 ...

  7. 1.MySQL数据库 2.SQL语句

    01数据库概念 * A: 什么是数据库数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作. * B: 什么是数据库 ...

  8. MySQL数据库的SQL语句

    MySQL数据库的SQL语句 MySQL的常用数据类型 MySQL数据类型及含义 char与varchar的区别 MySQL的基本命令 登录数据库 查看MySQL数据库版本 查看当前服务器中的数据库 ...

  9. MySQL数据库高级SQL语句(三)

    MySQL数据库高级SQL语句 SELECT TRIM 连接查询 CREATE VIEW UNION 交集值 无交集值 CASE SELECT TRIM SELECT TRIM (位置 '想移除掉的字 ...

  10. mysql怎么写sql语句_Navicat如何写sql语句

    sql是操作数据库中数据的语句,在不同的数据库中会略有不同.Navicat for MySQL是一款很方便的MySQL客户端工具,能够很好的提供操作数据库可视界面,在同类型的软件中,占有极高的市场份额 ...

最新文章

  1. 《JavaScript应用程序设计》一一2.3 lambdas
  2. RPC实现MQ通信的一个小例子
  3. 送餐机器人市场达11.6亿 美团将成“搅局者”?
  4. 一篇文章让你真正了解Java
  5. Moose File System分布文件系统测试
  6. MySQL中类似ORACLE中decode()判断语句实现
  7. php 之 ajax,PHP之AJAX
  8. cad直线和圆弧倒角不相切_曲线操作-直线,圆弧,圆,倒斜角
  9. 你增长的年龄,是因为丢掉了快乐吗?
  10. 【OpenCV 例程200篇】15. 图像的加权加法(cv2.addWeight)
  11. python怎么创建变量_Python中通过函数对象创建全局变量
  12. eBPF学习记录(四)使用libbpf开发eBPF程序
  13. Java集合:HashMap详解(JDK 1.8)
  14. 毕业论文写作与学术规范
  15. “尝鲜”元宇宙,周杰伦最佳拍档方文山将于7月25日官宣《华流元宇宙》
  16. 为不喝的朋友准备的!
  17. altium designer自动布线设置GND或其他网络不布线的方法
  18. 学习笔记 | 二八定律、ABC分析法
  19. FilenameFilter
  20. 26岁学编程会不会已经晚了?

热门文章

  1. html td无边框颜色,table的td设置背景颜色后边框框消失
  2. Inventor 二次开发学习指南(入门到精通)
  3. 在Word2010中交叉引用插入参考文献
  4. CTreeCtrl的HitTest用法
  5. Python 中 Logging 模块使用详情
  6. 泛型类、泛型方法的使用与理解
  7. 金蝶EAS BOS开发固定报表流程
  8. 超声波气象站和常规气象站的区别
  9. 香农公式和奈氏准则描述的是同一个东西吗?
  10. Java核心技术 卷1 基础知识 学习笔记——第三章 java的基本程序设计结构