【发布时间】:2011-07-30 01:04:45
【问题描述】:
我并不是要就总体而言哪个更好进行辩论,我是专门针对这个问题提出的。 :)
我需要编写一个查询来从包含 500k+ 条记录的数据库中提取用户 ID (uid) 列表。我只返回一个字段,uid。我可以查询我们的 Oracle 机器或我们的 MSSQL 2000 机器。查询看起来像这样(这还没有被简化)
select uid
from employeeRec
where uid = 'abc123'
是的,这确实是一个简单的查询。我需要调整帮助的地方是 uid 已编入索引,并且某些 uid 可能是(不是很多,而是一些)“ABC123”或“abc123”。 MSSQL 不关心大小写敏感,而 Oracle 关心。所以对于 Oracle,我的查询应该是这样的:
select uid
from employeeRec
where lower(uid) = 'abc123'
我了解到,如果您在 MSSQL 中的索引字段上使用 lower,则会使索引无用(有一些方法可以解决它,但这超出了我在这里的问题范围 - 因为如果我选择 MSSQL,我不会'根本不需要使用lower)。我想知道如果我选择 Oracle 并使用 lower() 函数,那也会损害查询的性能吗?
除了正在运行的其他一些查询之外,我循环这个查询大约 200 次,并且处理整个循环每次迭代需要 1 秒,我已经缩小了这个特定查询的速度。对于一个网页来说,200 秒似乎是永恒的。对于您的 CF 读者,超时值已增加,因此页面不会出错,也没有页面错误,我只是想加快查询速度。
需要注意的另一点:此数据库与正在运行的其他查询位于不同的城市,因此我确实预计会有一些滞后时间。
【问题讨论】:
-
谢谢。到目前为止,所有答案都与我阅读的内容一致。我只是想用简单的英语确认一下,因为我读过的一些博客有点过头了。我也将每个人的答案都提高了一分。
标签: sql-server oracle coldfusion performance