如果运行中数据量不多,大多数都是历史数据,那么加一下来区分运行中数据查询统计还是可以的,当然有用有redis来做统计的更加优雅的方式
一个表拥有千万级别数据量,给status字段加索引,是否有效?
这道面试题,还是可以从几个维度结合去回答的,我来跟大家聊聊我的看法~~
我觉得,在回答这个问题,可以跟面试官说说,普通索引加入后的简单执行流程.
假设有一张订单表order_info,然后订单状态字段order_status,有个普通索引idx_order_status,它是B+树索引.
我们现在简单点查询,就是查询已完成FINISHED的历史订单:
select * from order_info where order_status = 'FINISHED'
我们来说一下这个执行流程:
idx_order_status这棵 B+ 树的根节点开始查找。因为B+ 树是有序的,使用二分查找的方法逐层向下查找,直到找到包含FINISHED的叶子节点。FINISHED的起始位置后,数据库会扫描所有包含FINISHED的叶子节点。因为叶子节点存储了主键ID的值.它会遍历索引的叶子节点,以收集所有匹配FINISHED的记录的主键 ID。idx_order_status索引中获取的主键 ID,数据库会回到ID主键索引树,找到对应的行记录(这个过程叫做回表)。