比如通常业务查询sql如下:
select *
from order
where function in ('A','B')
and custom_id in ('123456788')
and init_date >=20250102
and init_date <=20250301
and time >=9150000
and time <=15300000;
已知Oracle库的order表,init_date是分区字段,并且一个月一分区,每天记录数500万条,custom_id是用户ID,function 值只有A,B,C,三个,只要查询条件包含了日期,就会分区裁剪,且每个分区里custom_id显然比init_date字段选择性高,那么问题如下:
1.日期字段是分区字段,是否还需要放到复合索引里(因为在裁剪的分区里通过custom_id似乎也能快速定位目标记录).
2.如果放进去的话,是否放最前面,还是放custom_id之后,因为明显custom_id选择性更好(但deepseek给出了init_date放最前面的建议,我感觉放custom_id似乎会更优?);
3.function需要放到复合索引里吗,还是在filter里和time一并被筛选过滤,所以针对上面的sql推荐的复合索引是哪些字段、什么顺序呢,谢谢各位大佬。用deepseek和腾讯元宝竟然给出了完全相反的建议,所以只能问坛友了
--
修改:lostinT FROM 106.120.74.*
FROM 106.120.74.*