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

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

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

mysql怎样进行sql优化?

发布时间:10/01 来源:未知 浏览: 关键词:
mysql进行sql优化的办法:1、以免全表扫描,在where及orderby波及的列上创立索引;2、在where子句中以免对字段进行null值推断,以免运用“!”或“<>”操纵符,以免运用or来连贯前提;3、慎用in和notin。

mysql进行sql优化的办法:1、以免全表扫描,在where及order by波及的列上创立索引;2、在where子句中以免对字段进行null值推断,以免运用“!=”或“<>”操作符,避免使用or来连接条件;3、慎用in和not in。

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人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板