INFORMIX-SE 7.32 :열에 최대 값을 가진 행을 찾는 더 좋고/더 빠른 방법이 있습니까?
나는 약 5,000 개의 Nrows가있는 트랜잭션 테이블을 가지고 있습니다. transaction.ticket_number [INT]는 특정 행이 업데이트 될 때마다 다음 순차적 티켓 번호로 업데이트되는 열입니다. 열은 고유 색인입니다. 저는 현재 최대 (transaction.ticket_num)를 찾으려면 다음 SELECT 문을 사용하고 있습니다 :
업데이트되는 행이 고객에 가입되어있는 transaction.fk_id [INT], 주문에 따라 클러스터되어 있기 때문에SELECT MAX(transaction.ticket_number) FROM transaction;
. pk_id [SERIAL]의 행은 물리적으로 트랜잭션 테이블의 끝에 위치하지 않고 각 특정 고객에 속한 트랜잭션 행 그룹 내에 상주합니다. 각 고객 트랜잭션을 스크롤 할 때 응답 시간이 빨라지기 때문에 각 고객의 트랜잭션을 클러스터링하기로했습니다. 위의 쿼리에서 max (transaction.ticket_number)를 찾는 더 빠른 방법이 있습니까? .. '트랜잭션의 고유 인덱스 (ticket_number) 내림차순'이 액세스를 향상 시키거나 색인이 완전히 시작되어 부적절하게 끝나는 것입니까? 때문에 등 NULLABLE 컬럼 및 기타 요인, 인덱스의 사용에
는
예, 단일 사용자, rowsize = 512, SE에서 FIRST에 대한 지원이 없습니다. ISQL (즉,perform & ace)는 SE 대신 IDS를 사용합니까? 내 응용 프로그램은 단일 사용자입니다. 그러나> 500K는 별도의 db에있는 역사적인 DSS 트랜잭션 테이블을 제외하지만 클라이언트가 분산 된 다중 사용자 db를 원할 수도 있습니다. 모든 전당포 지점. –
@Frank : 예, ISQL은 WITH ROWIDS 절로 작성되지 않으면 단편화 된 테이블에서 Perform이 작동하지 않는다는 경고가있을 때 IDS와 잘 작동합니다. 그러나 직접 마이그레이션의 경우에는 조각화 된 테이블이 없어도 괜찮을 것입니다. –
정말 멋지다! .. 내가 'FRAGMENT BY EXPRESSION'을 계획하고 있었는데, 이제는 reorg proc의 'CREATE TABLE customer'문에 'WITH ROWIDS'를 포함시켜야 할 것 같아서 dbsp_inactive_customers <오늘 - 365 IN dbsp_inactive_customers ' –