oracle 全表单表查询慢,如何解决

各位高手如题,表结构如图!~
[img]http://dl.iteye.com/upload/attachment/0064/3272/ca565492-db50-3143-87bc-753b621b99ca.jpg[/img]

1.检索lob字段的时候,按需去取lob字段,如果你不用,则给它设成null,比如我要id='10'的lob字段,那么sql:
[code="sql"]select decode(id,'10',lob_col,null) from tb[/code]
2.给lob字段建立单独的表空间,并设定把CACHE 设定成reads提高读取速度。
代码:

[code="sql"]--创建表空间
CREATE TABLESPACE MONTANA DATAFILE 'montana.tbs' SIZE 500M;

--修改lob对象的表空间(STRINGDATA和OBJECTDATA是lob字段)
ALTER TABLE tb MOVE LOB (STRINGDATA,OBJECTDATA) STORE AS
(
TABLESPACE MONTANA
CACHE READS

)[/code]

这表设计的无敌了·三个大字段 :o
全表查询不慢才怪 :shock:
建议clob更改为varchar2·尽量避免select *

[quote]那请问如果有大文本的内容的时候不用clob,那如何办?![/quote]

大文本有多大~ 都超过varchar2的 4000了?
一个办法是可以将3个大文本的字段分3张表,需要查询某个文本的时候去关联这张表。
一般情况是不需要也不应该频繁去查这种大文本字段。

你这个表有多大数据量,查询的sql怎么写的,怀疑你没建索引

嗯,有这个原因,只要操作lob字段了,效率会受到影响

和索引没有关系,只要你检索lob字段,数据很多的时候就是慢

因为lob是大数据对象,检索少量数据应该没有问题,如果你检索大量lob字段,效率会很慢,使用上面我提到的方法,效率能提高一些,但是治标不治本,尽量减少使用lob字段吧

可以把lob字段作成单独一张表,当你查询的时候,直接到这表中取出你要的属性, 比直接取lob字段后台在解析快很多。