300多列,where a=xxx,b=xxx,c=xxx如何建索引问题?
答案:2 悬赏:20 手机版
解决时间 2021-01-27 15:28
- 提问者网友:欲劫无渡
- 2021-01-26 15:38
300多列,where a=xxx,b=xxx,c=xxx如何建索引问题?
最佳答案
- 五星知识达人网友:孤老序
- 2021-01-26 17:03
建索引的目的就是要减少磁盘IO,所以并不是组合索引比单列索引就好,这个要根据需要,在最常见的列和选择率最高(即选出得少)的列优选几个做下单列索引试试追问首先谢谢回答~您说的也是常用的,我也想到过~~但我不知道能否能再有些其他更好的方法?追答索引并不能包办所有性能问题,你可以从更多方面来考虑,不知道你的实际需求所以不好建议
稍微举几个例子吧
1、需要查询月统计、季统计和年统计可以建一个月统计表
2、学生信息中除了学号与姓名经常其它表联合使用,而其它列只在查询学生个人信息才用,此时可把学生信息表一分为2,甚至更多,其中1个表只有学号与姓名,这种是横向划分
3、譬如流水表多以时间为查询条件,那可以以日为划分列建立分区表追问谢谢,不知道能否留个Q Q,交流请教呢?~如果方便的话还请私信我~追答QQ不对外公开的,就在这交流也挺好
稍微举几个例子吧
1、需要查询月统计、季统计和年统计可以建一个月统计表
2、学生信息中除了学号与姓名经常其它表联合使用,而其它列只在查询学生个人信息才用,此时可把学生信息表一分为2,甚至更多,其中1个表只有学号与姓名,这种是横向划分
3、譬如流水表多以时间为查询条件,那可以以日为划分列建立分区表追问谢谢,不知道能否留个Q Q,交流请教呢?~如果方便的话还请私信我~追答QQ不对外公开的,就在这交流也挺好
全部回答
- 1楼网友:夜余生
- 2021-01-26 18:21
如果查询的where中列的顺序是一致的,那么就建一个联合索引就可以了
create index idx_xxxx on tablexxx (a,b,c,...);追问当然不是这么简单啦~~不好意思,没有表达清楚~~~
建立联合索引是肯定的,但他有些是不规律的,例如你的索引是(a,b,c)还有个(c,d)
那你where a=xxx and c=xxx,是可以用上索引的,但where语句再复杂些索引就失效了~追答
那只能:
找出现多的组合,建立联合索引。
对于无法建立联合索引的,就建上单键索引。
然后交给数据库的查询优化器去选择用哪个索引吧。追问首先谢谢回答~您说的也是常用的,我也想到过~~但我不知道能否能再有些其他更好的方法?追答应该是没有。
你的一个表搞这么多列,这不是一个好的设计。
create index idx_xxxx on tablexxx (a,b,c,...);追问当然不是这么简单啦~~不好意思,没有表达清楚~~~
建立联合索引是肯定的,但他有些是不规律的,例如你的索引是(a,b,c)还有个(c,d)
那你where a=xxx and c=xxx,是可以用上索引的,但where语句再复杂些索引就失效了~追答
那只能:
找出现多的组合,建立联合索引。
对于无法建立联合索引的,就建上单键索引。
然后交给数据库的查询优化器去选择用哪个索引吧。追问首先谢谢回答~您说的也是常用的,我也想到过~~但我不知道能否能再有些其他更好的方法?追答应该是没有。
你的一个表搞这么多列,这不是一个好的设计。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯