加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

巧用这19条MySQL优化,服从至少进步3倍

发布时间:2019-01-18 10:48:31 所属栏目:编程 来源:喜欢拿铁的人
导读:本文我们来谈谈项目中常用的MySQL优化要领,共19条,详细如下: 1、EXPLAIN 做MySQL优化,我们要善用EXPLAIN查察SQL执行打算。 下面来个简朴的示例,标注(1、2、3、4、5)我们要重点存眷的数据: type列,毗连范例。一个好的SQL语句至少要到达range级别。杜

如下图所示,固然给secret字段添加了索引,但在explain功效并没有行使:

巧用这19条MySQL优化,服从至少进步3倍

那么怎样办理这个题目呢,谜底:行使全文索引。

在我们查询中常常会用到select id,fnum,fdst from dynamic_201606 where user_name like '%zhangsan%'; 。这样的语句,平凡索引是无法满意查询需求的。信用的是在MySQL中,有全文索引来辅佐我们。

建设全文索引的SQL语法是:

  1. ALTER TABLE `dynamic_201606` ADD FULLTEXT INDEX `idx_user_name` (`user_name`); 

行使全文索引的SQL语句是:

  1. select id,fnum,fdst from dynamic_201606 where match(user_name) against('zhangsan' in boolean mode); 

留意:在必要建设全文索引之前,请接洽DBA确定可否建设。同时必要留意的是查询语句的写法与平凡索引的区别。

14、停止在where子句中对字段举办表达式操纵

好比:

  1. select user_id,user_project from user_base where age*2=36; 

中对字段就行了算术运算,这会造成引擎放弃行使索引,提议改成:

  1. select user_id,user_project from user_base where age=36/2; 

15、停止隐式范例转换

where子句中呈现column字段的范例和传入的参数范例纷歧致的时辰产生的范例转换,提议先确定where中的参数范例。

16、对付连系索引来说,要遵守最左前缀法例

举列来说索引含有字段id、name、school,可以直接用id字段,也可以id、name这样的次序,可是name;school都无法行使这个索引。以是在建设连系索引的时辰必然要留意索引字段次序,常用的查询字段放在最前面。

17、须要时可以行使force index来逼迫查询走某个索引

有的时辰MySQL优化器采纳它以为吻合的索引来检索SQL语句,可是也许它所回收的索引并不是我们想要的。这时就可以回收forceindex来逼迫优化器行使我们拟定的索引。

18、留意范畴查询语句

对付连系索引来说,假如存在范畴查询,好比between、>、<等前提时,会造成后头的索引字段失效。

19、关于JOIN优化

巧用这19条MySQL优化,服从至少进步3倍

LEFT JOIN A表为驱动表,INNER JOIN MySQL会自动找出谁人数据少的表浸染驱动表,RIGHT JOIN B表为驱动表。

留意:

1)MySQL中没有full join,可以用以下方法来办理:

  1. select * from A left join B on B.name = A.namewhere B.name is nullunion allselect * from B; 

2)只管行使inner join,停止left join:

参加连系查询的表至少为2张表,一样平常都存在巨细之分。假如毗连方法是inner join,在没有其他过滤前提的环境下MySQL会自动选择小表作为驱动表,可是left join在驱动表的选择上遵循的是左边驱动右边的原则,即left join左边的表名为驱动表。

3)公道操作索引:

被驱动表的索引字段作为on的限定字段。

4)操作小表去驱动大表:

巧用这19条MySQL优化,服从至少进步3倍

从道理图可以或许直观的看出假如可以或许镌汰驱动表的话,镌汰嵌套轮回中的轮回次数,以镌汰 IO总量及CPU运算的次数。

5)巧用STRAIGHT_JOIN:

inner join是由MySQL选择驱动表,可是有些非凡环境必要选择另个表作为驱动表,好比有group by、order by等「Using filesort」、「Using temporary」时。STRAIGHT_JOIN来逼迫毗连次序,在STRAIGHT_JOIN左边的表名就是驱动表,右边则是被驱动表。在行使STRAIGHT_JOIN有个条件前提是该查询是内毗连,也就是inner join。其他链接不保举行使STRAIGHT_JOIN,不然也许造成查询功效禁绝确。

巧用这19条MySQL优化,服从至少进步3倍

这个方法偶然能镌汰3倍的时刻。

以上19条MySQL优化要领但愿对各人有所辅佐!

【编辑保举】

  1. 为什么Oracle不绝报复自家品MySQL?
  2. 如安在MySQL 8中重置root暗码
  3. 数据库人人生长日志:SQL Server怎样防备开拓职员获取敏感数据
  4. 简质朴现MySQL数据库的日记审计
  5. MySQL数据库计划总结
【责任编辑:未丽燕 TEL:(010)68476606】
点赞 0

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读