mysql如何获取慢SQL,以及慢查询的解决方式

https://blog.csdn.net/qq_35571554/article/details/82800463
(1)索引没起作用的情况
添加索引
优化查询语句
(2)优化数据库结构
分库分表
垂直和水平分区
(3)分解关联查询

(4)优化LIMIT分页
方法二:先查询出主键id值
select id,title from collect where id>=(select id from collect order by id limit 90000,1) limit 10;
原理:先查询出90000条数据对应的主键id的值,然后直接通过该id的值直接查询该id后面的数据。
方法三:“关延迟联”
Select news.id, news.description from news inner join (select id from news order by title limit 50000,5) as myNew using(id);
这里的“关延迟联”将大大提升查询的效率,它让MySQL扫描尽可能少的页面,获取需要的记录后再根据关联列回原表查询需要的所有列。这个技术也可以用在优化关联查询中的limit。
方法四:建立复合索引 acct_id和create_time

https://blog.csdn.net/qq_32002253/article/details/86772940
查询慢原因分析
主要原因1:后台数据库中的数据过多,没做数据优化导致后台查询数据很慢
次要原因2:前端数据请求-解析-展示过程处理不当
次要原因3:网络问题所致

1、缓存,在持久层或持久层之上做缓存
使用ehcache缓存,这个一般用于持久层的缓存,提供持久层、业务层的快速缓存,hibenate默认使用的二级缓存就是ehcache;
2、数据库表的大字段剥离
假如一个表的字段数有100多个,学会拆分字段,保证单条记录的数据量很小;
3、恰当地使用索引
必要时建立多级索引,分析MySQL的执行计划,通过表数据统计等方式协助数据库走正确的查询方式,该走索引就走索引,该走全表扫描就走全表扫描;
4、表的拆分
表分区和拆分,无论是业务逻辑上的拆分(如一个月一张报表、分库)还是无业务含义的分区(如根据ID取模分区);

5、字段冗余
减少跨库查询和大表连接操作;,数据通过单个或多个JOB生成出来,减少实时查询;

6、从磁盘上做文章
数据存放的在磁盘的内、外磁道上,数据获取的效率都是不一样的;

7、放弃关系数据库的某些特性
引入NoSQL数据库;
换种思路存放数据,例如搜索中的倒排表;

全部评论

相关推荐

点赞 评论 收藏
分享
FieldMatching:看成了猪头顾问,不好意思
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务