为了账号安全,请及时绑定邮箱和手机立即绑定

mysql 如何提高查询速度.

mysql 如何提高查询速度.

PHP
呼啦一阵风 2019-03-16 12:34:25
订单表 order 表根据日期拆分 为 order_3 三个月内表 order_this_year 今年内表, order_2016年表 order_2015年表, 以此类推.把订单拆分成小表 提高读写效率当用户选择 2016年订单 就直接到order_2016表查, 用户选择三个月就只到 order_3 表查数据. 提高效率 现在问题1order_this_year 今年内表 如何设计, 第一种设计思路 让 order_this_year不包含 order_3 三个月表的数据, 但会出现问题, 当用户查询 今年内订单时, 需要跨两个表查询 order_this_year和 order_3 如果后台涉及到统计今年内的数据时, 要跨表查询两张表数据如果涉及到 inner join 其他表后面又有 order by 等, 更加复杂 第二种设计思路 让order_this_year包含 order_3表三个月的数据, 如果用户查询今年内数据时就只查询order_this_year 通过冗余三个月数据来提高查询效率.但引发的问题是. order_3表的数据 发生更新变化时 要同时想更新 order_this_year表数据, 比如用户下单, 发货, 订单收货, 订单退货, 订单退款等等, 全站涉及到订单更新时 都要再去order_this_year更新一遍.这导致更新数据时麻烦. 指导指导如何为 order_this_year设计一种思路, 既能解决查询效率问题, 又能解决数据及时问题.
查看完整描述

3 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

首先,水平分表之后,用的是union,而不是inner,第一种思路比较好。
select * from [IND] where INDID=4

union

select * from [IND] where INDID=2
union
select * from [IND] where INDID=1
union
select * from [IND] where INDID=5
union
select * from [IND] where INDID=3

order by INDID ASC/DESC

查看完整回答
反对 回复 2019-03-18
?
九州编程

TA贡献1785条经验 获得超4个赞

我觉得你应该关注的点是怎么设计最近三个月记录的表,其他的表就按时间存储即可,
最近三个月可能是只取今年的表,也可能会取到去年的表,
所以我的建议是你最近三个月记录的表采用视图的形式,视图里面根据当前时间决定怎么从今年或者联合去年的表去取记录。

查看完整回答
反对 回复 2019-03-18
  • 3 回答
  • 0 关注
  • 541 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信