mysql sql优化面试题_SQL优化(面试题)
因为现在面试经常需要问的需要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优化(面试题)相关推荐
- mysql 慢sql 十几秒_sql优化之慢sql耗时排查
sql 语句性能分析 1.看 sql 语句执行时间 2.看 sql 的执行计划 3.查看 sql 的执行中各个环节耗时时间 4.查看mysql的执行进程,处理锁表的情况,命令 show PROCESS ...
- mysql生成树状执行计划_SQL优化 MySQL版 -分析explain SQL执行计划与笛卡尔积
SQL优化 MySQL版 -分析explain SQL执行计划 作者 Stanley 罗昊 [转载请注明出处和署名,谢谢!] 首先我们先创建一个数据库,数据库中分别写三张表来存储数据; course: ...
- sql查询索引语句_sql优化总结--基于sql语句优化和索引优化
概述 最近做查询,统计和汇总.由于数据量比较庞大,大部分表数据上百万,甚至有的表数据上千万.所以在系统中做sql优化比较多,特此写一篇文章总结一下关于sql优化方面的经验. 导致查询缓慢的原因 1.数 ...
- mysql 多个值求和_SQL优化大神玩转MySQL函数系列(2)LEAST,SUM的应用
大家好,我是知数堂SQL 优化班老师 网名:骑龟的兔子 我已经写了有趣的SQL系列和MySQL函数系列 本文章我归为MySQL函数系列,其实两个之间哪个都行. 今天给大家带来的问题如下 有如图所示的表 ...
- mysql sql 一部分记录_MySQL性能优化实践(很全面,值得收藏)
一 题记 最近公司项目添加新功能,上线后发现有些功能的列表查询时间很久.原因是新功能用到旧功能的接口,而这些旧接口的 SQL 查询语句关联5,6张表且编写不够规范,导致 MySQL 在执行 SQL 语 ...
- mysql 几阶b树_SQL优化 MySQL版 - B树索引进阶详讲(一)
SQL优化 MySQL版 - 索引分类.创建方式.删除索引.查看索引.SQL性能问题 作者 Stanley 罗昊 索引分类 单值索引 单的意思就是单列的值,比如说有一张数据库表,表内有三个字段,分别 ...
- mysql sql查询json数据类型_SQL中的JSON数据类型
SQL中的JSON数据类型 概述 MySQL支持原生JSON类型,使用JSON数据类型相较于将JSON格式的字符串存储在String型中的优势有: 存储时会自动验证JSON文本: 可以优化存储格式.存 ...
- mysql sql宽字节注入_sql注入之宽字节注入
宽字节注入是因为数据库使用了GBK编码,不过现在大都使用unicode国际编码,大多数网站都使用了utf-8的编码 不过既然是sql注入的一部分,也搭建环境 做做实验 实验环境: wamp集成包 实 ...
- mysql sql in or 替换_sql IN 的用法一例--替换 mysql longtext字段中某些内容的用法
之前给改版的一个学校里的站点突然提出要求,说需要将之前编辑的文章的字体大小全部改成默认值. 字体的控制无非有两种,一是font-size = 16 px:然后是.但是,之前发布的文章,文字的控制是由编 ...
- mysql sql 列变成横向_SQL 统计 字段 竖向转横向 (行转列)显示
在做一些SQL统计时,为了更直观看到结果,并进行比较,需要把竖向表的部分统计字段转成横向显示. 原数据格式: wbname newstime ---------------------- ...
最新文章
- KVM中四种网络模型(三)
- java8 list切片_Java8新特性_创建 Stream、流筛选与切片
- mvp 在 flutter 中的应用
- springboot第十一讲
- c++学习之const成员变量与成员函数
- Ubuntu 禁用 触摸板
- python乒乓球比赛规则介绍_乒乓球的比赛规则介绍
- Python基础——全局变量与局部变量
- CenterLoss
- matlab库存点仿真教程,MATLAB Simulink 汽车整车动力总成仿真 视频教程
- 驱动人生win7系统如何升级win10一键装机图文教程
- 图像检索 - 评价指标
- python 好用的库_12个超好用的Python库,都帮你们整理好了!
- 详细分析《三合一收款码》后台程序识别原理
- 关于促进交通运输与旅游融合发展的若干意见
- 如何部署软件 - 让你团队的部署像地狱一样无聊且毫无压力
- 计算机地图制图期末考试题,计算机地图制图原理思考题.doc
- Seata的四种模式介绍
- php网页报告2500字,教你写作文2500字
- 关于SpringSecurity登陆成功出现302状态码