慢查询总结

1.COUNT

count的作用 统计值的数量和统计行的数量

值是非空表达式(NOT NULL)

一个常见的错误就是在想统计行数的时候,在ount的括号中放入列名,如果想知道结果的行数,应该总是使用COUNT(*),这可以清晰的说明意图,并且得到好的性能。

2.MYISAM

只有在没有WHERE条件的时候OUNT(*)才是最快的,在有条件过滤的时候并不非常快。

3.简单优化

可以利用MYISAM对COUNT(*)的优化对已经有索引的一小部分做统计。

SELET COUNT(*) FROM WORD.ITY WHERE ID>5;

优化为下面的语句

SELET (SELET COUNT(*) FROM ITY) - COUNT(*) FROM ITY WHERE ID<=5;

这样的explain只扫描6行数据

使用一个查询统计同一列中不同值的数量。

select sum(if(color='blue',1,0)) as blue,sum(if(color='red',1,0)) as red from items;

下面是一个等价查询

select count(color='blue' or null) as blue,count(color='red' or null) as red from items;

4.优化联接

1.确保on 或using使用的列上有索引。

通常只需要在联接中的第2个表上添加索引就可以。

2.确保group by或order by只引用一个表中的列。这样可以使用索引。

3.谨慎升级mysql

 5.优化子查询

 对于子查询,尽可能的使用联接。

 6.优化group by和distinct

1.主要方式:索引

2.优化group by的策略:临时表或文件排序分组。

SQL_SMALL_RESULT : 强制使用临时表

SQL_BIG_RESULT :强制使用文件排序

通常对表的id进行分组会更加高效

可以使用SQL_MODE参数禁止SELET中使用在group by中出现的列

子查询创建的临时表不支持索引

所以要让子查询创建的临时表尽可能的小

3.使用ROLL UP 优化GROUP BY

WITH ROLLUP

最好的方式是将WITH ROLLUP 放在应用程序里。

注意: Rollup 与 order by 相互排拆

 7.优化limit和offset

LIMIT 和ORDER BY 一块使用。

如果没有索引,就使用文件排序。

8.优化SQL_AL_FOUND_ROWS

这个地方很重要

一个技巧:在含有limit的查询中添加SQL_AL_FOUND_ROWS,这样就可以知道没有limit的时候会返回多少行数据。服务器会预测将会发现多少行数据。

但是服务器并不能真正的做到,只是告诉服务器生成结果并丢掉结果中不需要的部分。而不是在得到需要的数据后就立即停止。这个选项代价很高。

一个非常好的设计:

如果每页有20条结果,那么应该查询limit 21行数据,只显示20条,如果结果中有21行,那么就会有下一页。

另一种方式:就是提取并缓存大量数据,比如1000行,然后从缓存中获取后续页面的数据。

可以让程序知道一共有多少数据,少于1000,程序知道有多少页,如果大于1000,可以显示找到的结果超过1000个。

这两种都比重复产生完整的结果效率高。

如果以上两种都不可以使用,可以使用覆盖索引,使用单独的count(*)会更好。

9.优化联合 union

mysql总是使用临时表来执行union,无法做更多的优化

重要的是,一定要使用union all,除非真的是需要服务器消除重复的行,

否则mysql会使用distint选项,来确保所有行数据的唯一性。

10.用户自定义变量

一些需要注意的问题:

会禁止缓存

不能用于文字常量和标识的地方(表名,列名,limit)

和连接有关,不能跨通信使用

如果使用连接池,会引起代码隔离

mysql 5.0大小写敏感

不能显示的声明类型,最好的方式给变量显示的一个初始值 0 、  0.0 、 ‘’

用户自定义变量的类型是动态的,赋值的时候才会变化。

优化器有时候会把变量优化掉

未定义的变量不会引起语法错误,很容易犯错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
当进行百万级别的数据量进行LIKE查询时,由于LIKE操作的模糊匹配特性,会导致查询速度变慢。这是因为MySQL在进行LIKE查询时需要遍历每一条数据,并逐个进行匹配,这个过程消耗了大量的时间和资源。 为了优化LIKE查询的速度,可以考虑以下几个方案: 1. 使用索引:在需要进行LIKE查询的列上创建索引,可以大大提高查询速度。可以使用全文索引(Full-text index)或者前缀索引(Prefix index)来加快模糊匹配的检索速度。 2. 使用全文搜索引擎:MySQL提供了全文搜索引擎(如MyISAM引擎),可以更高效地处理模糊匹配的查询。全文搜索引擎支持更为灵活的查询语法,并具有更好的性能。 3. 分页查询:如果查询结果集很大,可以考虑使用分页查询来减少单次查询的数据量,从而提高查询速度。通过限制每次查询的数据量,可以减少LIKE匹配的开销,并提升查询性能。 4. 使用其他查询优化技术:可以使用其他MySQL的查询优化技术,如查询缓存、表分区、分表等,来改善数据库的性能。这些技术可以通过合理的数据库设计和查询规划,减少LIKE查询的压力。 总结起来,对于MySQL中百万级别的数据进行LIKE查询,可以通过创建合适的索引,在数据库设计和查询规划上做出优化,以提高查询性能和效率。同时,可以考虑使用全文搜索引擎等更高效的工具来处理模糊匹配的查询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值