Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 10857|回复: 20

最近一个项目,纠结firebird还是oracle,请提建议。

[复制链接]

该用户从未签到

发表于 2013-8-9 18:14:08 | 显示全部楼层 |阅读模式
地市级大约30万条记录,省级大约600万条记录。
当前使用FB,对查询速度不太满意,可是转到oracle,一是安装不如FB方便,二是改代码工作量好大。
各位有这方面的经验可以借鉴一下吗?
回复

使用道具 举报

该用户从未签到

发表于 2013-8-9 22:37:25 | 显示全部楼层
查询慢,是什么样的查询语句慢。
Firebird查询慢一般要加上索引,并且要尽量使用查询语句利用到索引,加了索引后速度应该会有改善。
Oracle没用过。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2013-8-10 15:06:39 | 显示全部楼层
如果你用了 order by   或 Count、max等有时会比较慢的。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2013-8-11 11:51:57 | 显示全部楼层
可以贴个表结构(PK&index),然后来个sql范例大家研究下

如果这些关键东西没搞好,换什么数据库都一样
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2013-8-11 13:47:30 | 显示全部楼层
FB没问题,2000多家用户,大数据库50多G,6年的经验告诉我们FB没问题,放心用吧
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2013-8-11 17:42:55 | 显示全部楼层
本帖最后由 aaa 于 2013-8-12 14:23 编辑

Oracle和Firebird在相同数据库结构,同样数据量下,同平台中,会快多少?不至于天差地别。
而且你这个数据量应该并不大啊,千万条记录,数据库多少G?

可能找下设计原因更好。如果是并发太多,上集群吧。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2013-8-11 22:19:07 | 显示全部楼层
这点数据量对 FB 来说是没有问题的。

不过我倒是碰到 FB 的问题,不是数据量多少的问题。我的一个租用的虚拟服务器,跑 Ubuntu linux,我在上面安装了Firebird,用PHPBB来连接它。数据也就几百条而已,连续运行了1年多,突然某天PHPBB连接不上FB了。我telnet上去,重启FB也不行。看着3050端口是开着的,但客户端就是连接FB服务器不成功。最后只好重启LINUX,然后就恢复了。不知道什么原因。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2013-8-13 06:21:19 | 显示全部楼层
非常感谢各位的关注。这里我把FB数据库描述一下:
第一张表:
CREATE TABLE BMDWSJ
(
  ID Integer NOT NULL,
  BMMC Varchar(6),
  DWLX Varchar(12),
  DWMC Varchar(207),
  NSRSBH Varchar(26),
  GSZCH Varchar(26),
  ZZJGDM Varchar(18),
  DJZCH Varchar(21),
  FZR Varchar(27),
  DZ Varchar(227),
  QHMC Varchar(124),
  DH Varchar(81),
  XY Varchar(120),
  CLRQ Varchar(24),
  DZM Varchar(20),
  DWXZQH Varchar(100),
  DJZCLX Varchar(100),
  KEEP Varchar(20),
  PRIMARY KEY (ID)
);

第二张表:
CREATE TABLE BMGTHSJ
(
  ID Integer NOT NULL,
  GSZCH Varchar(24),
  DWMC Varchar(64),
  DZ Varchar(128),
  FZR Varchar(37),
  DH Varchar(40),
  CLRQ Varchar(25),
  BMMC Varchar(6),
  DWLX Varchar(6),
  DZM Varchar(20),
  KEEP Varchar(20),
  PRIMARY KEY (ID)
);

    第二张表,15万记录,第二张表,6万记录。
   
    一个比较费时的查询:select * from bmdwsj where dwmc in (select dwmc from bmgthsj)
这个查询运行几分钟都没出结果。

操作系统 win7,winXP。
另:本人对数据库不熟悉,没做任何优化操作。

   
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2013-8-13 06:27:08 | 显示全部楼层
davidwfx 发表于 2013-8-11 13:47
FB没问题,2000多家用户,大数据库50多G,6年的经验告诉我们FB没问题,放心用吧

振奋人心。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2013-8-13 14:37:38 | 显示全部楼层
cuibq 发表于 2013-8-13 06:21
非常感谢各位的关注。这里我把FB数据库描述一下:
第一张表:
CREATE TABLE BMDWSJ

DWMC这个字段应该建立索引,两个表都应该有
你的sql语句可以这样写
select * from bmdwsj where dwmc in (select distinct dwmc from bmgthsj)

oracle中 distinct的作用是筛选不重复记录用的,这样括号中的查询子集将是一个非常小的结果集
FB我不太熟悉,如果没有类似的命令,那么可以把括号中的查询改为分组查询
select dwmc from bmgthsj group by dwmc

这样做的主要目的就是为了提高查询速度,否则未经处理多表关联查询非常占用时间,而且网络通讯数据量剧增,用笛卡尔乘积就是15万*6万=90亿!!!,如果你的dwmc不重复数量就是100个,那么笛卡尔乘积不过就是1500万而已!
回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

GMT+8, 2025-5-2 00:54 , Processed in 0.063231 second(s), 9 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表