SQL语句结构及其优化

目录

一、SQL语句基本结构

二、SQL语句执行顺序

三、SQL优化

(1)基础优化


一、SQL语句基本结构

select */列名 from 表名

[ where 条件] #对整张表筛选

[group by 列名] #分组

[having 条件] #分组筛选

[order by ...] #排序

[limit ...] #分页

二、SQL语句执行顺序

  1. from

  2. on

  3. join

  4. where

  5. group by(开始使用select中的别名,后面的语句中都可以使用)

  6. avg,sum....

  7. having

  8. select

  9. distinct

  10. order by

  11. limit

三、SQL优化

(1)基础优化

查询SQL尽量不要使用select *,而是具体字段 理由: select * 进行查询时,很可能不会用到索引,就会造成全表扫描

避免在where子句中使用or来连接条件 查询id为1或者薪水为3000的用户:

反例:

SELECT * FROM student WHERE id=1 OR salary=30000 正例: 使用union all

SELECT * FROM student WHERE id=1 UNION ALL SELECT * FROM student WHERE salary=30000 分开两条sql写

SELECT * FROM student WHERE id=1 SELECT * FROM student WHERE salary=30000 理由:

使用or可能会使索引失效,从而全表扫描 对于or没有索引的salary这种情况,假设它走了id的索引,但是走到salary查询条件时,它还得全表扫描。也就是说整个过程需要三步:全表扫描+索引扫描+合并。如果它一开始就走全表扫描,直接一遍扫描就搞定。虽然mysql是有优化器的,处于效率与成本考虑,遇到or条件,索引还是可能失效的 使用varchar代替char 反例:

deptname char(100) DEFAULT NULL COMMENT '部门名称' 1 正例:

deptname varchar(100) DEFAULT NULL COMMENT '部门名称' 1 理由:

varchar变长字段按数据内容实际长度存储,存储空间小,可以节省存储空间 char按声明大小存储,不足补空格 其次对于查询来说,在一个相对较小的字段内搜索,效率更高 尽量使用数值替代字符串类型 主键(id):primary key优先使用数值类型int,tinyint 性别(sex):0-代表女,1-代表男;数据库没有布尔类型,mysql推荐使用tinyint 查询尽量避免返回大量数据 如果查询返回数据量很大,就会造成查询时间过长,网络传输时间过长。同时,大量数据返回也可能没有实际意义。如返回上千条甚至更多,用户也看不过来。 通常采用分页,一页习惯10/20/50/100条。

使用explain分析你SQL执行计划 SQL很灵活,一个需求可以很多实现,那哪个最优呢?SQL提供了explain关键字,它可以分析你的SQL执行计划,看它是否最佳。Explain主要看SQL是否使用了索引。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kblzxj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值