巧用这19条MySQL优化,服从至少进步3倍
如下图所示,固然给secret字段添加了索引,但在explain功效并没有行使: 那么怎样办理这个题目呢,谜底:行使全文索引。 在我们查询中常常会用到select id,fnum,fdst from dynamic_201606 where user_name like '%zhangsan%'; 。这样的语句,平凡索引是无法满意查询需求的。信用的是在MySQL中,有全文索引来辅佐我们。 建设全文索引的SQL语法是:
行使全文索引的SQL语句是:
留意:在必要建设全文索引之前,请接洽DBA确定可否建设。同时必要留意的是查询语句的写法与平凡索引的区别。 14、停止在where子句中对字段举办表达式操纵 好比:
中对字段就行了算术运算,这会造成引擎放弃行使索引,提议改成:
15、停止隐式范例转换 where子句中呈现column字段的范例和传入的参数范例纷歧致的时辰产生的范例转换,提议先确定where中的参数范例。 16、对付连系索引来说,要遵守最左前缀法例 举列来说索引含有字段id、name、school,可以直接用id字段,也可以id、name这样的次序,可是name;school都无法行使这个索引。以是在建设连系索引的时辰必然要留意索引字段次序,常用的查询字段放在最前面。 17、须要时可以行使force index来逼迫查询走某个索引 有的时辰MySQL优化器采纳它以为吻合的索引来检索SQL语句,可是也许它所回收的索引并不是我们想要的。这时就可以回收forceindex来逼迫优化器行使我们拟定的索引。 18、留意范畴查询语句 对付连系索引来说,假如存在范畴查询,好比between、>、<等前提时,会造成后头的索引字段失效。 19、关于JOIN优化 LEFT JOIN A表为驱动表,INNER JOIN MySQL会自动找出谁人数据少的表浸染驱动表,RIGHT JOIN B表为驱动表。 留意: 1)MySQL中没有full join,可以用以下方法来办理:
2)只管行使inner join,停止left join: 参加连系查询的表至少为2张表,一样平常都存在巨细之分。假如毗连方法是inner join,在没有其他过滤前提的环境下MySQL会自动选择小表作为驱动表,可是left join在驱动表的选择上遵循的是左边驱动右边的原则,即left join左边的表名为驱动表。 3)公道操作索引: 被驱动表的索引字段作为on的限定字段。 4)操作小表去驱动大表: 从道理图可以或许直观的看出假如可以或许镌汰驱动表的话,镌汰嵌套轮回中的轮回次数,以镌汰 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,不然也许造成查询功效禁绝确。 这个方法偶然能镌汰3倍的时刻。 以上19条MySQL优化要领但愿对各人有所辅佐! 【编辑保举】
点赞 0 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |