本文整理自网络,侵删。
目录
- 前言
- 现状
- 问题一
- 多表联查
- 单表查询
- 结论
- 问题二
- 多表联查
- 单表查询
- 问题
- 如何解决
前言
技术能解决的事情改技术
技术解决不了的事情该需求
现状
假设我们目前有两张表
业务表 书( t_a_book ) 阅读历史记录表 (t_r_book_history) 用户表
其两张表的数据逻辑如下
t_a_book
t_r_book_history
t_a_user
当然了,我们假设当前的数据量并不只是我们眼前看到的这几条数据,而是线上真实情况。
每张表至少都是10w+起步
问题一
这时候,我们需要面临第一个业务问题,
我们需要做一个报表,显示用户阅读图书的记录,并显示用户名,用户号,书名
这时候我们如何设计查询SQL
多表联查
SELECT * FROM t_r_book_history bh LEFT JOIN t_a_user u ON bh.user_id = u.id LEFT JOIN t_a_book b ON bh.book_id = b.id WHERE bh.record_flag = 1 ORDER BY bh.release_time DESC LIMIT 10;
查询出来的结果为
其逻辑为
- 数据库根据release_time倒序查询数据表,取出倒序的数据
- 根据左连接获取 用户信息
- 根据左连接获取 图书信息
单表查询
如果此时我们选择化繁为简,使用单表的查询方法,来查询数据其SQL为
SELECT * FROM t_r_book_history bh WHERE bh.record_flag = 1 ORDER BY bh.release_time DESC LIMIT 10; // 用户信息 SELECT * FROM t_a_user u WHERE u.id IN (); // 图书信息 SELECT * FROM t_a_books b WHERE u.id IN ();
其数据逻辑与多表联查一致,唯一不同的便是需要查询三次
结论
我们可以看,当前两种查询方式的逻辑来看。
主要会存在的流量压力在与 t_r_book_history 这张表上面
当数据量大的时候,我们只需要根据release_time 做索引,简化这一步的操作。
后续都可以使用主键来简化操作
相关阅读 >>
更多相关阅读请进入《mysql》频道 >>
数据库系统概念 第6版
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » MySQL详解如何优化查询条件
标签:mysql
相关推荐
评论
管理员已关闭评论功能...