【发布时间】:2010-04-05 05:17:20
【问题描述】:
我已经确定了我的用户通常使用的查询结构。创建复合索引来支持这些结构并提供 FIRST_ROWS 功能对我来说有意义吗?
如果我从 SE 迁移到 IDS,我将失去使用 C-ISAM 调用编写低级函数的能力,但会获得 FIRST_ROWS 以及其他好处,例如:用于索引扫描的 SET-READS (onconfig USE_[KO]BATCHEDREAD )、优化器指令、并行查询等。
评论信息
当铺生产表通过以下方式查询:customer.name char(30) 使用通配符 (LASSURF* 查找 LASTNAME SURNAME, FIRSTNAME) 或通过pawns.ticket_number INT 查询。客户和典当通过以下方式连接:customer.name =pawns.name,而不是 customer.serial =pawns.fk。 trx 日期超过 1 年的典当被移动到另一个硬盘上的不同数据库中的历史表 (>500K nrows)。历史索引按 trx_date 降序排列。这就是 ad-hoc 复合查询构造发挥作用的地方。
一旦发现客户的典当交易,该行就会在客户进行抵押或赎回 pymt 时更新。如果客户在 90 天内未进行 pymt,用户将手动更新他们将没收的典当。当客户赎回典当或因缺少 pymt 而没收典当时,pawns.status 变为非活动状态。当他们的 trx 日期超过 1 年时,不活动的人会从典当表中移出到历史表中,因此此应用程序中不会发生大规模更新。当铺每天早上营业前都会运行此程序。
{ISQL 2.10.06E (SE-DOS16M protected mode) pawns table optimization -
once-daily, before start of business, procedure}
unload to "U:\UNL\ACTIVES.UNL"
select * from pawns where pawns.status = "A"
order by pawns.cust_name, pawns.trx_date;
unload to "U:\UNL\INACTIVE.UNL"
select * from pawns
where pawns.status <> "A"
and pawns.trx_date >= (today - 365)
order by pawns.cust_name, pawns.trx_date desc;
unload to "U:\UNL\HISTORIC.UNL"
select * from pawns
where pawns.status <> "A"
and pawns.trx_date < (today - 365)
order by pawns.trx_date desc;
drop table pawns;
create table pawns
(
trx_num serial,
cust_name char(30),
status char(1),
trx_date date,
. . . ) in "S:\PAWNSHOP.DBS\PAWNS";
load from "U:\UNL\ACTIVES.UNL" insert into pawns; {500:600 nrows avg.}
load from "U:\UNL\INACTIVE.UNL" insert into pawns; {6500:7000 nrows avg.}
load from "U:\UNL\HISTORIC.UNL" insert into dss:historic; {>500K nrows}
create cluster index pa_cust_idx on pawns (cust_name);
{this groups each customers pawns together, actives in
oldest trx_date order first, then inactive pawns within the last year in most
recent trx_date order. inactives older than 1 year are loaded into historic
table in a separate database, on a separate hard disk. historic table
optimization is done on a weekly basis for DSS queries.}
create unique index pa_trx_num_idx on pawns (trx_num);
create index pa_trx_date_idx on pawns (trx_date);
create index pa_status_idx on pawns (status);
{grant statements...}
update statistics;
【问题讨论】:
-
这是stackoverflow.com/questions/2563358 的延续,但这个问题与其他问题截然不同。
-
我对我的应用程序的一些功能做了一些澄清,并重新格式化了 SQL proc 示例以便于查看。历史表与我在查询继续时查看 FIRST_ROWS 结果的愿望有关,并为需要这些功能的任何其他应用程序建议此功能。这也会影响我决定是升级到 IDS 还是留在 SE。
-
本论坛中的“Informix Subquery's with FIRST option”是否会更深入地了解 FIRST_ROWS 讨论,还是仅返回查询完成后指定的第一个 nrows?
标签: sql sql-server database oracle informix