我有一个关于表的简单计数的查询。根据下面的屏幕截图,除了单个索引位于不同列之外,表中没有主键。
如何降低此查询的费用?
即使我在transactionno列上创建了额外的索引,也没有成本差异。该表有45列。表总大小为520MB。
CREATE TABLE TBL_COUNT
( ROW_NUMBER NUMBER(22,0) NOT NULL ENABLE,
DATECREATED TIMESTAMP (6),
TRANSACTIONDATE VARCHAR2(64),
TRANSACTIONTIME VARCHAR2(64),
TRANSACTIONNO VARCHAR2(100),
FIRST_NAME VARCHAR2(100),
LAST_NAME VARCHAR2(100),
REG_NO VARCHAR2(30),
EMAIL VARCHAR2(100),
PURCHASE_TYPE VARCHAR2(50),
RA_STATUS VARCHAR2(50),
BSCS_CODE VARCHAR2(20),
ORACLE_ITEM_CODE VARCHAR2(100),
ORACLE_PACKAGE_CODE VARCHAR2(100),
SKU_CODE VARCHAR2(50),
ITEM_DESCRIPTIONS VARCHAR2(100),
MSISDN VARCHAR2(150),
QUANTITY NUMBER(22,0),
UNIT_PRICE NUMBER(22,2),
SERVICE_TAX NUMBER(22,2),
TOTAL_PRICE NUMBER(22,2),
PAYMENT_METHOD VARCHAR2(50),
PAYMENT_CHANNEL VARCHAR2(50),
PAYMENT_MERCHANT_ID VARCHAR2(50),
REGISTER_REGION VARCHAR2(30),
AR_INTERFACESTATUS VARCHAR2(30),
PAYMENT_STATUS VARCHAR2(30),
PAYMENT_DATE VARCHAR2(64),
PAYMENT_TIME VARCHAR2(64),
ISSUING_BANK VARCHAR2(50),
CREDIT_CARD_NO VARCHAR2(50),
CREDIT_CARD_REASON_CODE VARCHAR2(100),
BANK_APPROVAL_CODE VARCHAR2(30),
BANK_REGISTER_REGION VARCHAR2(30),
BANK_REF_NO VARCHAR2(30),
PRIMARY_CONTACT_NO VARCHAR2(30),
ALTERNATE_CONTACT_NO VARCHAR2(30),
REFERENCE_CONTACT_NO VARCHAR2(30),
PRODUCT_UID VARCHAR2(30),
BANK_BIN VARCHAR2(50),
SETTLEMENT_DATE TIMESTAMP (3),
SKU_TYPE VARCHAR2(50),
EXTERNAL_ORDER_NUMBER VARCHAR2(64),
GST_TAX_AMOUNT NUMBER(22,2),
GST_TAX_CODE VARCHAR2(255 )
) TABLESPACE TS ;
CREATE INDEX USER.TBL_COUNT_INDEX ON USER.TBL_COUNT (DATECREATED)
TABLESPACE TS_IDX ;
答案 0 :(得分:0)
任何索引都可以用于计数,只要它基于被约束为NOT NULL的列,或者如果它被保证为每行保持一个值 - 例如位图索引,或(my_column,0)上的索引。
或者,您可以使用SAMPLE子句获得估计的行数。
编辑:您说您在transactionno上创建了索引,并且DDL显示不限制为NOT NULL。在ROW_NUMBER(唯一的非NULL列)上创建索引,或者在(transactionno,0)上创建基于函数的索引