1、查询慢的原因2、优化数据访问3、执行过程优化4、优化特定类型的查询
网络,cpu,io,上下文切换,系统调用,生成统计信息,锁等待时间
查询性能低下的主要原因是访问的数据太多,某些查询不可避免的需要筛选大量的数据,可以通过减少访问数据量的方式进行优化
是否向数据库请求了不需要的数据:
查询不需要的记录:常常会误以为mysql会只返回需要的数据,实际上mysql却是先返回全部结果再进行计算,在日常的开发习惯中,经常是先用select语句查询大量的结果,然后获取前面的N行后关闭结果集。优化方式是在查询后面添加limit,而limit不是分页,limit是限制输出,分页只是限制输出的一个方向。而limit 20000,5 这种写法也是不要写,容易全表扫描,当limit后面第一个数字比较大的时候,可以考虑改写子查询多表关联时返回全部列总是取出全部列重复查询相同的数据:可以把数据缓存起来
一把来说关闭缓存,这不多说。在解析一个查询语句之前,如果查询缓存是打开的,那么mysql会优先检查这个查询是否命中查询缓存中的数据,如果查询恰好命中了查询缓存,那么会在返回结果之前会检查用户权限,如果权限没有问题,那么mysql会跳过所有的阶段,就直接从缓存中拿到结果并返回给客户端。但是最好关掉。
将left join ,right join 转化为 inner join 。 内连接的效率比外连接效率高。但是也是看具体的需求和写的sql语句,并不是一定内连接的效率比外连接效率高。
关联查询的时候 on 的条件最好是索引列。
group by 、 order by 的列如果能用索引列的话,尽量用索引列,效率会高。
子查询的优化最重要的优化建议是尽可能使用关联查询代替,为什么不推荐使用子查询,因为临时表,子查询的结果会放到临时表里,临时表里也是io,不如直接join。但是还是看具体情况,别都把子查询改成关联查询。
group by 后的列,一般是select的字段除了聚合函数之外都应写在group by 之后,但是group by 后还可以只写标识列,也就是id,没想到吧,写id比写其他列效率高。但是还是看具体的需求来写sql。但是话说回来用id分组有什么意义?id一般来说本来就不重复。所以知道这个意思就行了。
优化limit
select * from table limit 100000,5
优化为
select * from table t1 inner join (select id from table limit 1000000,5) t2 on t1.id=t2.id
不要给我 where id>100000 这种优化,再去inner join 一般id都是uuid,uuid就不是这种id数字连续的了。就用不了where id >这种sql了
因为select * limit 100000,5是全表扫描,改成子查询和关联查询后,select id limit 100000,5 查询的是id,是主键索引,所以快,最后再关联查询这五条的select *
优化此类查询的最简单的办法就是尽可能地使用覆盖索引,而不是查询所有的列,上面还是select * 可以适当的改一下。
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
随着国产化发展进程加速,一批优秀的国产数据库高可用方案也随之应运而生,万里数据库的核心产品安全数据库GreatDB,以内置VIPplugin的形式对外提供读写分离和故障转移功能。安全数据库GreatDB结合客户的众多部署和投产实践,将上述HaProxy+Keepalived2个软件的能力,结合组复制的paxos协议选主切换机制,以数据库可插拔的plugin形式,内置集成了VIP插件。用户可通过in
首先说明一下mysql的版本:mysql>selectversion();+-----------+|version()|+-----------+|5.7.17|+-----------+1rowinset(0.00sec)表结构:mysql>desctest;+--------+---------------------+------+-----+---------+-------------
当使用索引列查询的时候,尽量不要使用表达式,应该把计算放到业务层而不是数据库层。例如下面这两个sql语句,显然应该避免的是第二种where字句后面写计算的通过执行计划可以看出这个sql的type是const而这个写表达式的是index,const比index执行效率高尽量使用主键查询,而不是其他索引,因为主键查询不会触发回表。使用索引扫描来做排序:mysql有两种方式可以生成有序的结果:通过排序操
文章作者:黄炎 文章来源:爱可生云数据库 本文根据黄炎在2018年7月7日【My
网络性能参数:速率,带宽,吞吐量,时延,往返时间,信道利用率速率:数据的传送速率,单位是Bit/s带宽:在计算机网络中,网络带宽表示单位时间内网络中某信道所能通过的“最高数据率”,单位为bit/s吞吐量:表示在发送端与接收端之间实际的传送数据速率(bit/s)时延:指数据从网络的一端传送到另外一端所需的时间。发送时延:是主机或路由器发送数据帧所需要的时间。公式为:数据帧长度(bit)/发送速率(b
性能优化优化概述为什么要优化优化策略影响优化的计算机结构计算机硬件特性c++特性测量性能分析程序执行热点代码优化字符串优化字符串的几种方式消除字符串转换优化算法算法的时间开销优化查找和排序的工具箱高效查找算法高效排序算法优化模式优化动态分配内存c++变量回顾c++动态变量回顾减少动态变量的使用减少动态变量的重新分配移除无谓复制实现移动语义扁平数据结构优化热点语句从循环中移除代码从函数中移除代码优化
LAMP(Linux+Apche+mysql/Mariadb+Php/Python)属于集中式架构中的一种典型架构,它是Linux操作系统、ApacheWeb服务器、mysql数据库和PHP编程语言的缩写。LAMP架构中,Web服务器和应用程序服务器都运行在同一个服务器上,通过mysql数据库进行数据交互和管理。虽然LAMP架构采用了集中式架构的模式,但它也可以应用于一些中小型网站和Web应用的开
什么是mysql和MongoDBmysql和MongoDB是两个可用于存储和管理数据的数据库管理系统。mysql是一个关系数据库系统,以结构化表格格式存储数据。相比之下,MongoDB以更灵活的格式将数据存储为JSON文档。两者都提供性能和可扩展性,但它们为不同的应用场景提供了更好的性能。mysql是一种关系型数据库管理系统,它使用结构化查询语言(SQL)来操作数据。SQL是一种通用的、标准化的、
近日,麒麟软件研发中心虚拟化技术研发团队推出虚拟GPU方案V2.0,该方案采用vhost-user-gpu、3D渲染同步优化、基于动态数据的云桌面刷新等技术,将虚拟机GPU的3D渲染性能大幅提升到后端GPU3D渲染性能的80%以上,无需专业显卡支持,通过消费级显卡即可使虚拟机满足图像处理、平面设计、3D建模以及游戏等场景的需求,同时可实现1:N的灵活性和隔离性,大大降低了用户使用成本。随着云桌面技
前言我们都知道InnoDB在模糊查询数据时使用"%xx"会导致索引失效,但有时需求就是如此,类似这样的需求还有很多,例如,搜索引擎需要根基用户数据的关键字进行全文查找,电子商务网站需要根据用户的查询条件,在可能需要在商品的详细介绍中进行查找,这些都不是B+树索引能很好完成的工作。通过数值比较,范围过滤等就可以完成绝大多数我们需要的查询了。但是,如果希望通过关键字的匹配来进行查询过滤,那么就需要基于
扫一扫关注公众号
添加我为好友,拉您入交流群!
请使用微信扫一扫!