MySQL慢查询以及重构查询的方式记录


当前第2页 返回上一页

比如我们做数据统计时要对大量订单号的信息进行查询,那么是一次性用in查询,还是切割参数list多次查询呢,答案是切割参数list多次查询,因为当in里面的参数过多时,MySQL就会认为再走索引已经不行了,可能就会进行全表查询,如果这个时候数据表数据量过大,那可能就会造成查询超时。

// chops a list into non-view sublists of length L
static <T> List<List<T>> chopped(List<T> list, final int L) {
    List<List<T>> parts = new ArrayList<List<T>>();
    final int N = list.size();
    for (int i = 0; i < N; i += L) {
        parts.add(new ArrayList<T>(
            list.subList(i, Math.min(N, i + L)))
        );
    }
    return parts;
}
List<Integer> numbers = Collections.unmodifiableList(
    Arrays.asList(5,3,1,2,9,5,0,7)
);
List<List<Integer>> parts = chopped(numbers, 3);
System.out.println(parts); // prints "[[5, 3, 1], [2, 9, 5], [0, 7]]"
parts.get(0).add(-1);
System.out.println(parts); // prints "[[5, 3, 1, -1], [2, 9, 5], [0, 7]]"
System.out.println(numbers); // prints "[5, 3, 1, 2, 9, 5, 0, 7]" (unmodified!)

在程序中将list截断,从而使查询能使用索引而不是进行全表扫描。

阿里开发手册中就推荐仔细评估in后面的集合元素数量,控制在1000个之内。

分解关联查询

将多表inner join 进行分解,分解成小查询,超过三个表的join,就需要禁止了。

优点有:

  1. 缓存的效率会更高,
  2. 分解后的查询可以减少锁的竞争
  3. 应用层可以缓存查询数据,减小数据库的压力。
  4. 可以提升查询效率,因为用主键之类进行in查询,比按照条件范围查询可能会更高效,尤其是大表的时候。
  5. 可以减少冗余记录的查询
  6. 更进一步,这样做相当于在应用中实现了哈希关联,而不是使用MySQL的嵌套循环关联。某些场景哈希关联的效率要高很多。

总结

到此这篇关于MySQL慢查询以及重构查询的文章就介绍到这了,更多相关MySQL慢查询重构查询内容请搜索

更多Mysql内容来自木庄网络博客


标签:Mysql

返回前面的内容

相关阅读 >>

如何在mysql中创建用户和授予权限

mysql中如何进行子查询?

mysql列修改怎么操作?

触发器什么时候执行

mysql利用子查询效率怎么样

mysql数据库如何利用用navicat新建用户?

常用的mysql命令分享

mysql令人大跌眼镜的隐式转换

分享mysql中实用的几种sql语句

mysql中select语句介绍及使用示例

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...