因为现在面试经常需要问的需要SQL优化,问的具体操作步骤时候的常见做法,所以网上总结这些操作步骤:

SQL优化的具体操作:

1、在表中建立索引,优先考虑where、group by使用到的字段。

2、尽量避免使用select *,返回无用的字段会降低查询效率。如下:

SELECT * FROM t

优化方式:使用具体的字段代替*,只返回使用到的字段。

3、尽量避免使用in 和not in,会导致数据库引擎放弃索引进行全表扫描。如下:

SELECT * FROM t WHERE id IN (2,3)

SELECT * FROM t1 WHERE username IN (SELECT username FROM t2)

优化方式:如果是连续数值,可以用between代替。如下:

SELECT * FROM t WHERE id BETWEEN 2 AND 3

如果是子查询,可以用exists代替。如下:

SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.username = t2.username)

4、尽量避免使用or,会导致数据库引擎放弃索引进行全表扫描。如下:

SELECT * FROM t WHERE id = 1 OR id = 3

优化方式:可以用union代替or。如下:

SELECT * FROM t WHERE id = 1

UNION

SELECT * FROM t WHERE id = 3

(PS:如果or两边的字段是同一个,如例子中这样。貌似两种方式效率差不多,即使union扫描的是索引,or扫描的是全表)

5、尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描。如下:

SELECT * FROM t WHERE username LIKE '%li%'

优化方式:尽量在字段后面使用模糊查询。如下:

SELECT * FROM t WHERE username LIKE 'li%'

6、尽量避免进行null值的判断,会导致数据库引擎放弃索引进行全表扫描。如下:

SELECT * FROM t WHERE score IS NULL

优化方式:可以给字段添加默认值0,对0值进行判断。如下:

SELECT * FROM t WHERE score = 0

7、尽量避免在where条件中等号的左侧进行表达式、函数操作,会导致数据库引擎放弃索引进行全表扫描。如下:

SELECT * FROM t2 WHERE score/10 = 9

SELECT * FROM t2 WHERE SUBSTR(username,1,2) = 'li'

优化方式:可以将表达式、函数操作移动到等号右侧。如下:

SELECT * FROM t2 WHERE score = 10*9

SELECT * FROM t2 WHERE username LIKE 'li%'

8、当数据量大时,避免使用where 1=1的条件。通常为了方便拼装查询条件,我们会默认使用该条件,数据库引擎会放弃索引进行全表扫描。如下:

SELECT * FROM t WHERE 1=1

优化方式:用代码拼装sql时进行判断,没where加where,有where加and。

mysql sql优化面试题_SQL优化(面试题)相关推荐

  1. mysql 慢sql 十几秒_sql优化之慢sql耗时排查

    sql 语句性能分析 1.看 sql 语句执行时间 2.看 sql 的执行计划 3.查看 sql 的执行中各个环节耗时时间 4.查看mysql的执行进程,处理锁表的情况,命令 show PROCESS ...

  2. mysql生成树状执行计划_SQL优化 MySQL版 -分析explain SQL执行计划与笛卡尔积

    SQL优化 MySQL版 -分析explain SQL执行计划 作者 Stanley 罗昊 [转载请注明出处和署名,谢谢!] 首先我们先创建一个数据库,数据库中分别写三张表来存储数据; course: ...

  3. sql查询索引语句_sql优化总结--基于sql语句优化和索引优化

    概述 最近做查询,统计和汇总.由于数据量比较庞大,大部分表数据上百万,甚至有的表数据上千万.所以在系统中做sql优化比较多,特此写一篇文章总结一下关于sql优化方面的经验. 导致查询缓慢的原因 1.数 ...

  4. mysql 多个值求和_SQL优化大神玩转MySQL函数系列(2)LEAST,SUM的应用

    大家好,我是知数堂SQL 优化班老师 网名:骑龟的兔子 我已经写了有趣的SQL系列和MySQL函数系列 本文章我归为MySQL函数系列,其实两个之间哪个都行. 今天给大家带来的问题如下 有如图所示的表 ...

  5. mysql sql 一部分记录_MySQL性能优化实践(很全面,值得收藏)

    一 题记 最近公司项目添加新功能,上线后发现有些功能的列表查询时间很久.原因是新功能用到旧功能的接口,而这些旧接口的 SQL 查询语句关联5,6张表且编写不够规范,导致 MySQL 在执行 SQL 语 ...

  6. mysql 几阶b树_SQL优化 MySQL版 - B树索引进阶详讲(一)

    SQL优化 MySQL版  - 索引分类.创建方式.删除索引.查看索引.SQL性能问题 作者 Stanley 罗昊 索引分类 单值索引 单的意思就是单列的值,比如说有一张数据库表,表内有三个字段,分别 ...

  7. mysql sql查询json数据类型_SQL中的JSON数据类型

    SQL中的JSON数据类型 概述 MySQL支持原生JSON类型,使用JSON数据类型相较于将JSON格式的字符串存储在String型中的优势有: 存储时会自动验证JSON文本: 可以优化存储格式.存 ...

  8. mysql sql宽字节注入_sql注入之宽字节注入

    宽字节注入是因为数据库使用了GBK编码,不过现在大都使用unicode国际编码,大多数网站都使用了utf-8的编码 不过既然是sql注入的一部分,也搭建环境  做做实验 实验环境: wamp集成包 实 ...

  9. mysql sql in or 替换_sql IN 的用法一例--替换 mysql longtext字段中某些内容的用法

    之前给改版的一个学校里的站点突然提出要求,说需要将之前编辑的文章的字体大小全部改成默认值. 字体的控制无非有两种,一是font-size = 16 px:然后是.但是,之前发布的文章,文字的控制是由编 ...

  10. mysql sql 列变成横向_SQL 统计 字段 竖向转横向 (行转列)显示

    在做一些SQL统计时,为了更直观看到结果,并进行比较,需要把竖向表的部分统计字段转成横向显示. 原数据格式: wbname        newstime ---------------------- ...

最新文章

  1. KVM中四种网络模型(三)
  2. java8 list切片_Java8新特性_创建 Stream、流筛选与切片
  3. mvp 在 flutter 中的应用
  4. springboot第十一讲
  5. c++学习之const成员变量与成员函数
  6. Ubuntu 禁用 触摸板
  7. python乒乓球比赛规则介绍_乒乓球的比赛规则介绍
  8. Python基础——全局变量与局部变量
  9. CenterLoss
  10. matlab库存点仿真教程,MATLAB Simulink 汽车整车动力总成仿真 视频教程
  11. 驱动人生win7系统如何升级win10一键装机图文教程
  12. 图像检索 - 评价指标
  13. python 好用的库_12个超好用的Python库,都帮你们整理好了!
  14. 详细分析《三合一收款码》后台程序识别原理
  15. 关于促进交通运输与旅游融合发展的若干意见
  16. 如何部署软件 - 让你团队的部署像地狱一样无聊且毫无压力
  17. 计算机地图制图期末考试题,计算机地图制图原理思考题.doc
  18. Seata的四种模式介绍
  19. php网页报告2500字,教你写作文2500字
  20. 关于SpringSecurity登陆成功出现302状态码

热门文章

  1. 【DBAI】《基于机器学习的数据库技术综述》
  2. Java入门级基础教学(史上最详细的整合)
  3. 高级维修电工及技师技能实训考核装置QY-JSPX01
  4. Ueditor编辑器修改字体和字号?
  5. esp8266教程:网络基础知识
  6. 2020年计算机保研经验总结
  7. MATLAB 基础教程:编程调试与常见报错
  8. Python中更新pip版本的那些事
  9. 【裴礼文数学分析】例1.2.4
  10. SONY SVP1322 笔记本电脑升级