查询oracle数据库速度慢的问题!!!

csplayer_hello 2010-01-27 10:54:40
开发工具 VS2008 数据库 ORACLE 10g 数据库连接采用 Enterprise Library 4.0 新建的项目只一个页面查询 表中200多条记录,居然用5、6秒钟, 什么原因? 怎么解决啊?
...全文
367 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
csplayer_hello 2010-02-02
  • 打赏
  • 举报
回复
谢了各位,问题根本原因是表中A_DETAILS为clob类型,包含大量数据。 表和数据是别人给我的,我也没注意。
csplayer_hello 2010-01-28
  • 打赏
  • 举报
回复
DataTable ds = new DataTable();
ds = CD.getDatabySQL("select A_ID,A_T_ID,A_TITLE,A_DETAILS,A_DATE,UPLOADFILE,NAME from ARTICLE left join ARTICLE_TYPE on ARTICLE.A_T_ID=ARTICLE_TYPE.ID order by A_ID desc");
this.DataList.DataSource = ds;
this.DataList.DataBind();

就这几行代码

public DataTable getDatabySQL(string sql)
{
Database db = null;
db = DatabaseFactory.CreateDatabase("Data");
DbCommand DbCommand = db.GetSqlStringCommand(sql);
DataSet ds = db.ExecuteDataSet(DbCommand);
return ds.Tables[0];
}
这是返回数据集的函数
oo_2008 2010-01-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 csplayer_hello 的回复:]
设置了主键,索引,再说。即使没设置。 我调试用的,一共才200条记录。也不应该那么慢啊。
用PL/SQL查非常快的。
[/Quote]
那肯定是程序代码的问题
oo_2008 2010-01-28
  • 打赏
  • 举报
回复
首先你得判断一下是不是Oracle数据库引起的?
你把sql语句放pl/sql中执行一下看看,如果是的再从数据库上考虑!
200条记录我觉得慢的问题更可能出在代码上
csplayer_hello 2010-01-28
  • 打赏
  • 举报
回复
设置了主键,索引,再说。即使没设置。 我调试用的,一共才200条记录。也不应该那么慢啊。
用PL/SQL查非常快的。
flyerwing 2010-01-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mail_ricklee 的回复:]
1.用System.Data.OracleClient,不要用OLEDB
2.定义参数查询
3.分页查询数据
4.nvarchar2对应C#中nvarchar,varchar2对应C#中varchar
参考FortuneBase
参考地址www.cnblogs.com/mail-ricklee
[/Quote]
是不是表都没有主键索引
csplayer_hello 2010-01-28
  • 打赏
  • 举报
回复
就是希望高手针对我所说的具体情况帮我琢磨一下。
l13873666736 2010-01-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 csplayer_hello 的回复:]
DataTable ds = new DataTable();
        ds = CD.getDatabySQL("select A_ID,A_T_ID,A_TITLE,A_DETAILS,A_DATE,UPLOADFILE,NAME from ARTICLE left join ARTICLE_TYPE on ARTICLE.A_T_ID=ARTICLE_TYPE.ID order by A_ID desc");
        this.DataList.DataSource = ds;
        this.DataList.DataBind();

就这几行代码

public DataTable getDatabySQL(string sql)
        {
            Database db = null;
            db = DatabaseFactory.CreateDatabase("Data");
            DbCommand DbCommand = db.GetSqlStringCommand(sql);
            DataSet ds = db.ExecuteDataSet(DbCommand);
            return ds.Tables[0];
        }
这是返回数据集的函数
[/Quote]

ORDER BY 也是要建索引滴
l13873666736 2010-01-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 csplayer_hello 的回复:]
DataTable ds = new DataTable();
        ds = CD.getDatabySQL("select A_ID,A_T_ID,A_TITLE,A_DETAILS,A_DATE,UPLOADFILE,NAME from ARTICLE left join ARTICLE_TYPE on ARTICLE.A_T_ID=ARTICLE_TYPE.ID order by A_ID desc");
        this.DataList.DataSource = ds;
        this.DataList.DataBind();

就这几行代码

public DataTable getDatabySQL(string sql)
        {
            Database db = null;
            db = DatabaseFactory.CreateDatabase("Data");
            DbCommand DbCommand = db.GetSqlStringCommand(sql);
            DataSet ds = db.ExecuteDataSet(DbCommand);
            return ds.Tables[0];
        }
这是返回数据集的函数
[/Quote]

ORACLE里的左连接不用LEFT JOIN 用加号就可以了
SELECT A.* FROM TA A,TB B WHERE A.COL1=B.COL1(+)
l13873666736 2010-01-28
  • 打赏
  • 举报
回复
不要用system.data.oracleclient
装ODP.NET,这个是ORACLE为.NET提供的专用驱动,
上WWW.CONNECTIONSTRING.COM找连接字符串,
我一直这样用,小数据量想都不用想这种问题
aboluoyuren 2010-01-28
  • 打赏
  • 举报
回复
ARTICLE.A_T_ID=ARTICLE_TYPE.ID


ARTICLE表

ARTICLE_TYPE表

要建立主外建关系
xray2005 2010-01-27
  • 打赏
  • 举报
回复
个人体验:Oracle功能强大,但是想很好的玩转Oracle还是要花不是心思和时间。
不像SQL SERVER 简单易懂。

1,先truncate一遍数据表,再插入一些数据。肯定快了。
2,建立索引。
3,查询计划分析一下你的SQL 语句。
4,检查你代码
  • 打赏
  • 举报
回复
呃。很多时候做东西非要转到数据库转呢?

我的做法是把数据放在文件里面。

汗。。。这儿是C#版!
mail_ricklee 2010-01-27
  • 打赏
  • 举报
回复
1.用System.Data.OracleClient,不要用OLEDB
2.定义参数查询
3.分页查询数据
4.nvarchar2对应C#中nvarchar,varchar2对应C#中varchar
参考FortuneBase
参考地址www.cnblogs.com/mail-ricklee

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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