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

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

当前位置: 主页>网站教程>数据库> MySQL索引以及查询优化的细致介绍
分享文章到:

MySQL索引以及查询优化的细致介绍

发布时间:08/01 来源:未知 浏览: 关键词:
本篇文章给大家带来的内容是对于MySQL索引以及查询优化的细致介绍,有一定的参照 价值,有需要的伴侣可以参照 一下,但愿对你有所帮忙。? 本篇文章给大家带来的内容是对于MySQL索引以及查询优化的细致介绍,有一定的参照 价值,有需要的伴侣可以参照 一下,但愿对你有所帮忙。

文章《MySQL查询剖析》讲述了运用MySQL慢查询和explain下令来定位mysql机能瓶颈的办法,定位出机能瓶颈的sql语句后,则需要对低效的sql语句进行优化。本文主要计议MySQL索引道理及常用的sql查询优化。

一个简略的对照测试

前面的案例中,c2c_zwdb.t_file_count表只要一个自增id,FFileName字段未加索引的sql施行状况如下:

2、以免select *

在解析的历程中,会将'*' 顺次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的工夫。

所以,应当养成一个需要什么就取什么的好习惯。

3、order by 语句优化

任安在Order by语句的非索引项或者有盘算表达式都将落低查询速度。

办法:1.重写order by语句以运用索引;

  2.为所运用的列创立别的一个索引

  3.绝对以免在order by子句中运用表达式。

4、GROUP BY语句优化

提高GROUP BY 语句的效率, 可以通过将不需要的记载在GROUP BY 以前过滤掉

低效:

SELECT JOB , AVG(SAL)

FROM EMP

GROUP by JOB

HAVING JOB = ‘PRESIDENT'

OR JOB = ‘MANAGER'

高效:

SELECT JOB , AVG(SAL)

FROM EMP

WHERE JOB = ‘PRESIDENT'

OR JOB = ‘MANAGER'

GROUP by JOB

5、用 exists 取代 in

许多时候用 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)

6、运用 varchar/nvarchar 取代 char/nchar

尽可能的运用 varchar/nvarchar 取代 char/nchar ,由于第一变长字段存储空间小,可以节俭存储空间,其次关于查询来说,在一个相对较小的字段内搜寻效率显然要高些。

7、能用DISTINCT的就不消GROUP BY

SELECT OrderID FROM Details WHERE UnitPrice > 10 GROUP BY OrderID

可改为:

SELECT DISTINCT OrderID FROM Details WHERE UnitPrice > 10

8、能用UNION ALL就不要用UNION

UNION ALL不施行SELECT DISTINCT函数,这样就会减少许多无须要的资源。

9、在Join表的时候运用相当类型的例,并将其索引

要是利用程序有许多JOIN 查询,你应当确认两个表中Join的字段是被建过索引的。这样,MySQL内部会启动为你优化Join的SQL语句的机制。

并且,这些被用来Join的字段,应当是雷同的类型的。例如:要是你要把 DECIMAL 字段和一个 INT 字段Join在一起,MySQL就没法运用它们的索引。关于那些STRING类型,还需要有雷同的字符集才行。(两个表的字符集有可能不同)

本篇文章到这里就全部完毕了,对于MySQL的更多见识大家可以关注 百分百源码网 的MySQL教程栏目!!!

以上就是MySQL索引以及查询优化的细致介绍的细致内容,更多请关注 百分百源码网 其它相干文章!

打赏

打赏

取消

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

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

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

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

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

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板