现有业务须按类别写入数据表,但表记录海量数据。并且需要频繁的按照类别取得满足条件的一些数据。为了取得最好的操作效率,应该如何设计数据库结构,谢谢!
自己的办法,效率不高
create table table (
id int primary key,
name varchar(10) not null,
classId int not null);
Create index classid on table(classId);在大量数据的时候执行这样的查询速度异常慢
select * from table where classid=2 and name like='%d%';
谢谢!

解决方案 »

  1.   

    可以考虑分区表,或者把索引建到另一个表空间,优化语句,比如 你用instr(name,'d')>0应该速度比你写的那个快一点
      

  2.   

    在name上也建立一个索引,然后把表和索引都分析一下。
    然后
    select/*+ index(table1) */ * from table1 where  classid=2 and name like='%d%';
      

  3.   

    qiaozhiwei(乔) instr(name,'d')>0速度比like快有理论或事实依据吗?....
      

  4.   

    我怀疑qiaozhiwei(乔)的说法,但他说的按照ID进行表分区倒是可行的。将索引建立到例外的表空间对提升速度倒不一定。尽管Oracle有函数索引,但用在这里不可行,因为like '%xx%'导致表扫描的。 
      

  5.   

    分区 + 索引btw: 这是业务逻辑设计的问题~  
    如取上次销售数据.因此需要select业务表,但....可以建一个业务临存表,专门存储最新的销售数据~  避免每次都select一张海量的业务表.
    呵呵... 好的整体设计,才可以令性能更好~  否则就算用到oracle10g,企业级服务器...业务逻辑设计没做好,性能一样上不去~ :)