索引的问题,这种情况是使用复合索引还是单个索引?? 高手快来

ndb96 2007-04-06 04:04:26
oracle9i

create table test(
id number(9),
mobile varchar2(15),
service_name varchar2(20),
service_id varchar2(20),
content varchar2(400),
get_time date);

这个表以后可能要有几百万的数据,以下是经常要用到的查询语句
select * from test where mobile='xxxxx';
select * from test where id=xxxx;
select * from test where service_id='xxxxx';

select * from test where to_chr(get_time,'yyyymm')='xxxx' and mobile='xxxxx';

select * from test where to_chr(get_time,'yyyymm')='xxxx' and service_id='xxxxx';

第一个问题:如何建立索引才能达到很好的查询效果?

第二个问题:get_time字段建表时是用date类型好,还是换成varchar2类型好,那种会让以后的查询更快?
...全文
257 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhc_9999 2007-04-06
  • 打赏
  • 举报
回复
1、ID若为主键就不需在索引,否则在ID上建一个
2、mobile 和serice_id各建一个索引
3、get_time是否要建根据你的数据的分布,若同一个mobile下的get_time有多少,一般不需要在建了,
adaizi1980 2007-04-06
  • 打赏
  • 举报
回复
呵呵,刚才说的"任何查询字段最好不要做运算"应该是任何查询条件字段最好不要做运算,做了运算的条件尽量往后搁就对了
adaizi1980 2007-04-06
  • 打赏
  • 举报
回复
id如果是主键会带主键索引如果不是就独立建索引;
mobile 和 get_time建一组索引;
service_id 和 get_time建一组索引;
查询时把get_time写在mobile或service_id的后面,否则用不上索引,任何查询字段最好不要做运算,做了运算的字段用不上索引;

索引多了会影响插入效率,但是在常用查询字段上建索引可以及大提高查询速度,同时有没有对插入造成的影响在可以容忍范围内的话,多建几个索引也可以,不过要是每个字段都建就没意义了,索引这东西要根据需求来追求查询效率和插入效率的一个均衡
tgm78 2007-04-06
  • 打赏
  • 举报
回复
复核索引必须使用前导列,才能被使用上,否则select的时候,用不上索引
CathySun118 2007-04-06
  • 打赏
  • 举报
回复
1.检查要在一起查询的字段建复合索引
2.service_id,get_time,mobile建立复合索引
ndb96 2007-04-06
  • 打赏
  • 举报
回复
分别建这么多的索引会不会影响系统性能,好像听说一个表最好不要建超过3个索引,
另外这个表经常插入数据。
yuyu1980 2007-04-06
  • 打赏
  • 举报
回复
id mobile service_name service_id get_time
分别建立索引
时间最好用data 不过查询的时候 不要to_chr(get_time,'yyyymm') 而应该 get_time between
a and b
运算后用不到索引

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧