合肥达内IT培训
美国上市IT培训机构

4001118989

合肥达内培训当单条SQL运行慢的时候应该如何解决


我们在前几期的文章中给大家简单介绍了mysql数据库性能优化原则与常用方法等内容,而本文我们就具体来分析一下,当单条SQL运行慢的时候应该如何解决。

合肥达内培训当单条SQL运行慢的时候应该如何解决

问题分析

造成单条SQL运行比较慢的常见原因有以下两个:

未正常创建或使用索引;

表中数据量太大。

解决方案1:创建并正确使用索引

索引是一种能帮助MySQL提高查询效率的主要手段,因此一般情况下我们遇到的单条SQL性能问题,通常都是由于未创建或为正确使用索引而导致的,所以在遇到单条SQL运行比较慢的情况下,你先要做的就是检查此表的索引是否正常创建。

如果表的索引已经创建了,接下来就要检查一下此SQL语句是否正常触发了索引查询,如果发生以下情况那么MySQL将不能正常的使用索引:

在where子句中使用!=或者<>操作符,查询引用会放弃索引而进行全表扫描;

不能使用前导模糊查询,也就是'%XX'或'%XX%',由于前导模糊不能利用索引的顺序,必须一个个去找,看是否满足条件,这样会导致全索引扫描或者全表扫描;

如果条件中有or即使其中有条件带索引也不会正常使用索引,要想使用or又想让索引生效,只能将or条件中的每个列都加上索引才能正常使用;

在where子句中对字段进行表达式操作。

因此你要尽量避免以上情况,除了正常使用索引之外,我们也可以使用以下技巧来优化索引的查询速度:

尽量使用主键查询,而非其他索引,因为主键查询不会触发回表查询;

查询语句尽可能简单,大语句拆小语句,减少锁时间;

尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型;

用exists替代in查询;

避免在索引列上使用isnull和isnotnull。

回表查询:普通索引查询到主键索引后,回到主键索引树搜索的过程,我们称为回表查询。

解决方案2:数据拆分

当表中数据量太大时SQL的查询会比较慢,你可以考虑拆分表,让每张表的数据量变小,从而提高查询效率。

1.垂直拆分

指的是将表进行拆分,把一张列比较多的表拆分为多张表。比如,用户表中一些字段经常被访问,将这些字段放在一张表中,另外一些不常用的字段放在另一张表中,插入数据时,使用事务确保两张表的数据一致性。

垂直拆分的原则:

把不常用的字段单独放在一张表;

把text,blob等大字段拆分出来放在附表中;

经常组合查询的列放在一张表中。

2.水平拆分

指的是将数据表行进行拆分,表的行数超过200万行时,就会变慢,这时可以把一张的表的数据拆成多张表来存放。

通常情况下,我们使用取模的方式来进行表的拆分,比如,一张有400W的用户表users,为提高其查询效率我们把其分成4张表users1,users2,users3,users4,然后通过用户ID取模的方法,同时查询、更新、删除也是通过取模的方法来操作。

表的其他优化方案:

使用可以存下数据小的数据类型;

使用简单的数据类型,int要比varchar类型在MySQL处理简单;

尽量使用tinyint、smallint、mediumint作为整数类型而非int;

尽可能使用notnull定义字段,因为null占用4字节空间;

尽量少用text类型,非用不可时好考虑分表;

尽量使用timestamp,而非datetime;

单表不要有太多字段,建议在20个字段以内。

【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。

预约申请免费试听课程

         

上一篇:合肥达内培训云计算技术对软件开发架构的影响趋势
下一篇:合肥达内培训混合云技术应用都有哪些注意事项

合肥达内培训软件开发经验分享都有哪些方法

合肥达内java培训软件开发常见问题都有哪些

合肥达内培训DevOps转型实践应用都有哪些方法

合肥达内培训混合云技术应用都有哪些注意事项

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

  • 视频学习QQ群

    添加QQ群:1143617948

    免费领取达内课程视频学习资料

Copyright © 2021 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
江西省

贵州省

广西省

海南省