百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> mysql怎样进行sql优化?
分享文章到:

mysql怎样进行sql优化?

发布时间:09/01 来源:未知 浏览: 关键词:

mysql停止sql优化的办法:1、幸免全表扫描,在where及order by触及的列上创立索引;2、在where子句中幸免对字段停止null值推断,幸免使用“!=”或“<>”操纵符,幸免使用or来连接前提;3、慎用in和not in。

MySQL中的SQL的常见优化战略

1 幸免全表扫描

对查询停止优化,应尽量幸免全表扫描,第一应思考在 where 及 order by 触及的列上创立索引。

2 幸免推断null值
应尽量幸免在 where 子句中对字段停止 null 值推断,不然将致使引擎舍弃使用索引而停止全表扫描,如:

select id from t where num is null

可以在num上设定默许值0,确保表中num列没有null值,然后这样查询:

select id from t where num=0

3 幸免不等值推断

应尽量幸免在 where 子句中使用!=或<>操纵符,不然引擎将舍弃使用索引而停止全表扫描。

4 幸免使用or逻辑
应尽量幸免在 where 子句中使用 or 来连接前提,不然将致使引擎舍弃使用索引而停止全表扫描,如:

select id from t where num=10 or num=20

可以这样查询:

select id from t where num=10
union all
select id from t where num=20

5 慎用in和not in逻辑
in 和 not in 也要慎用,不然会致使全表扫描,如:
select id from t1 where num in(select id from t2 where id > 10)
此时外层查询会全表扫描,不使用索引。可以修改为:
select id from t1,(select id from t1 where id > 10)t2 where t1.id = t2.id
此时索引被使用,可以明显晋升查询效力。

6 留意含糊查询
下面的查询也将致使全表扫描:
select id from t where name like '%abc%'
含糊查询假如是必要前提时,可以使用select id from t where name like 'abc%'来实现含糊查询,此时索引将被使用。假如头匹配是必要逻辑,倡议使用全文搜索引擎(Elastic search、Lucene、Solr等)。

7 幸免查询前提中字段运算
应尽量幸免在 where 子句中对字段停止表达式操纵,这将致使引擎舍弃使用索引而停止全表扫描。如:
select id from t where num/2=100
应改为:
select id from t where num=100*2

8 幸免查询前提中对字段停止函数操纵
应尽量幸免在where子句中对字段停止函数操纵,这将致使引擎舍弃使用索引而停止全表扫描。如:
select id from t where substring(name,1,3)='abc'--name以abc开头的id
应改为:
select id from t where name like 'abc%'

9 WHERE子句“=”左边留意点
不要在 where 子句中的“=”左边停止函数、算术运算或其他表达式运算,不然系统将大概没法准确使用索引。

10 组合索引使用
在使用索引字段作为前提时,假如该索引是复合索引,那么必需使用到该索引中的第一个字段作为前提时才能包管系统使用该索引,不然该索引将不会被使用,并且应尽大概的让字段次序与索引次序相一致。

11 不要定义无异议的查询
不要写一些没成心义的查询,如需要生成一个空表构造:
select col1,col2 into #t from t where 1=0
这类代码不会返回任何结果集,但是会耗损系统资源的,应改成这样:
create table #t(...)

12 exists
许多时候用 exists 代替 in 是一个好的选中:
select num from a where num in(select num from b)
用下面的语句更换:
select num from a where exists(select 1 from b where num=a.num)

13 索引也大概失效
并不是所有索引对查询都有效,SQL是按照表中数据来停止查询优化的,当索引列有大量数据反复时,SQL查询大概不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即便在sex上建了索引也对查询效力起不了作用。

14 表格字段类型选中
尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会落低查询和连接的机能,并会增添储备开销。这是由于引擎在处置查询和连接时会逐个比力字符串中每一个字符,而关于数字型而言只需要比力一次就够了。
尽大概的使用 varchar 代替 char ,由于第一可变长度字段储备空间小,可以节约储备空间,其次关于查询来说,在一个相对较小的字段内搜索效力明显要高些。

15 查询语法中的字段
任何地方都不要使用 select * from t ,器具体的字段列表代替“*”,不要返回用不到的任何字段。

16 索引无关优化
不使用*、尽量不使用union,union all等关键字、尽量不使用or关键字、尽量使用等值推断。

表连接倡议不超越5个。假如超越5个,则思考表格的设计。(互联网利用中)

表连接方式使用外联优于内联。
外连接有根基数据存在。如:A left join B,根基数据是A。
A inner join B,没有根基数据的,先使用笛卡尔积完成全连接,在按照连接前提得到内连接结果集。

大数据量级的表格做分页查询时,假如页码数目过大,则使用子查询配合完成分页逻辑。
Select * from table limit 1000000, 10
Select * from table where id in (select pk from table limit 100000, 10)

以上就是mysql怎样停止sql优化?的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板