免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2990 | 回复: 2
打印 上一主题 下一主题

[求助] 一个600W数据表查询的速度优化 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-25 17:02 |只看该作者 |倒序浏览
目前有一个600W数据的表,表结构如下:

-- Create table
create table ORDER_MAIN
(
  ORDER_ID                 VARCHAR2(1 not null,
  ORDER_START_TIME         DATE,
  ORDER_STATE_CHANGE_TIME  DATE,
  ORDER_CALL_TEL           VARCHAR2(20),
  PAY_ACCT_NO              VARCHAR2(40),
  COMMODITY_TOTAL          NUMBER(10),
  REMARK                   VARCHAR2(400),
  ORDER_STATE_CODE         VARCHAR2(2) not null,
  PAY_TIME                 DATE,
  SHOP_ID                  VARCHAR2(,
  ACCESS_ID                VARCHAR2(20),
  PAY_TYPE_ID              NUMBER(2),
  PAY_CHANNEL_ID           NUMBER(2),
  ISSUER_CODE              VARCHAR2(20),
  CALL_AREA_CODE           VARCHAR2(6),
  ORDER_CALL_IP            VARCHAR2(20),
  AREA_CODE                VARCHAR2(6) not null,
  EXTERNAL_SYSTEM_ORDER_ID VARCHAR2(20),
  USER_NAME                VARCHAR2(20),
  COMMODITY_TOTAL_NUM      INTEGER,
  PAYMENT_SHOP_ID          VARCHAR2(40) not null,
  ACCOUNT                  VARCHAR2(20) not null,
  CLIENT_BINDING_STATE     VARCHAR2(1),
  ITA_BANK_CODE            VARCHAR2(2),
  NOTIFY_URL               VARCHAR2(400),
  CLIENT_LEAVE_WORD        VARCHAR2(400),
  IS_PRINT_INVOICE         CHAR(1),
  INVOICE_TITLE            VARCHAR2(200),
  INVOICE_CONTENT          VARCHAR2(20),
  ORDER_END_TIME           DATE,
  PAY_FEE                  NUMBER,
  CASH_USE_VALUE           INTEGER,
  CDKEY_USE_VALUE          INTEGER,
  GIFT_USE_VALUE           INTEGER,
  ORDER_FROM_CODE          VARCHAR2(2),
  ORIGINAL_ORDER_INFO      CLOB
)
tablespace EBUSINESS_DEV
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 28
    minextents 1
    maxextents unlimited
  );
-- Add comments to the table
comment on table ORDER_MAIN
  is '这个里的商户ID为实际的商户ID,如果订单是从代理商的途径过来,报文送过来的为代理';
-- Add comments to the columns
comment on column ORDER_MAIN.ORDER_ID
  is '订单编码:4位年2位月2位日2位小时2位分钟2位秒+4位序列号  共18位';
comment on column ORDER_MAIN.ORDER_START_TIME
  is '订单开始时间 yyyy-mm-dd hh24 :mm:ss';
comment on column ORDER_MAIN.ORDER_STATE_CHANGE_TIME
  is '订单状态改变时间 yyyy-mm-dd hh24 :mm:ss';
comment on column ORDER_MAIN.ORDER_CALL_TEL
  is '用户拨打接入电话号码';
comment on column ORDER_MAIN.PAY_ACCT_NO
  is '支付账户帐号';
comment on column ORDER_MAIN.COMMODITY_TOTAL
  is '商品总价';
comment on column ORDER_MAIN.REMARK
  is '备注';
comment on column ORDER_MAIN.ORDER_STATE_CODE
  is '序号  订单状态
10  等待付款
11  付款成功
12  付款失败
13  等待发货
14  发货成功
15  发货失败
16  客户收货
';
comment on column ORDER_MAIN.PAY_TIME
  is '支付交易发起时间';
comment on column ORDER_MAIN.SHOP_ID
  is '录入后自动生成,省份代码2位+地市代码2位+商户短编号4位';
comment on column ORDER_MAIN.ACCESS_ID
  is '20位数字,格式: 4位年+2位月+2位日+2位小时+2位分+2位秒+6位随机数字。';
comment on column ORDER_MAIN.PAY_TYPE_ID
  is '支付方式ID(10 借记卡 11信用卡 12积分兑换 13 充值卡 14话费)';
comment on column ORDER_MAIN.PAY_CHANNEL_ID
  is '支付渠道ID
(10通联
11环讯)';
comment on column ORDER_MAIN.ISSUER_CODE
  is '银行代码';
comment on column ORDER_MAIN.CALL_AREA_CODE
  is '订单拨打电话归属地(填写地区代码)';
comment on column ORDER_MAIN.ORDER_CALL_IP
  is '订单接入IP地址(根据接入方式判断是填写IP还是电话)';
comment on column ORDER_MAIN.AREA_CODE
  is '地区编码';
comment on column ORDER_MAIN.EXTERNAL_SYSTEM_ORDER_ID
  is '外部系统填写,必须保证在外部系统中的唯一性';
comment on column ORDER_MAIN.USER_NAME
  is '系统登陆ID';
comment on column ORDER_MAIN.COMMODITY_TOTAL_NUM
  is '订购商品的总数量';
comment on column ORDER_MAIN.PAYMENT_SHOP_ID
  is '第三方支付机构分配的商户ID';
comment on column ORDER_MAIN.ACCOUNT
  is '结算账户ID';
comment on column ORDER_MAIN.CLIENT_BINDING_STATE
  is '是否绑定银行卡(0未绑定,1绑定)';
comment on column ORDER_MAIN.ITA_BANK_CODE
  is '中间账户银行编码';
comment on column ORDER_MAIN.NOTIFY_URL
  is '回调URL';
comment on column ORDER_MAIN.CLIENT_LEAVE_WORD
  is '客户留言';
comment on column ORDER_MAIN.IS_PRINT_INVOICE
  is '是否打印发票:1打印发票;0不打印发票';
comment on column ORDER_MAIN.INVOICE_TITLE
  is '发票抬头:为空即表示个人,填值即表示公司';
comment on column ORDER_MAIN.INVOICE_CONTENT
  is '发票内容';
comment on column ORDER_MAIN.ORDER_END_TIME
  is '订单完成时间';
comment on column ORDER_MAIN.PAY_FEE
  is '支付手续费';
comment on column ORDER_MAIN.CASH_USE_VALUE
  is '现金券使用金额';
comment on column ORDER_MAIN.CDKEY_USE_VALUE
  is 'CDKEY使用金额';
comment on column ORDER_MAIN.GIFT_USE_VALUE
  is '礼品券使用金额';
comment on column ORDER_MAIN.ORDER_FROM_CODE
  is '订单来源代码(10-我要买网站, 11-我要买wap)';
-- Create/Recreate primary, unique and foreign key constraints
alter table ORDER_MAIN
  add constraint XPK订单信息主表 primary key (ORDER_ID)
  using index
  tablespace EBUSINESS_DEV
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 2M
    minextents 1
    maxextents unlimited
  );
-- Create/Recreate indexes
create index IDX查询用户订单 on ORDER_MAIN (USER_NAME)
  tablespace EBUSINESS_DEV
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
create index IDX重复用户 on ORDER_MAIN (TRUNC(ORDER_START_TIME,'fmmm'), ORDER_STATE_CODE, ORDER_ID, SUBSTR(AREA_CODE,0,4)||'00', ORDER_CALL_TEL)
  tablespace EBUSINESS_DEV
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 3M
    minextents 1
    maxextents unlimited
  );
create index XPK商户ID on ORDER_MAIN (SHOP_ID)
  tablespace EBUSINESS_DEV
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );

查询语句如下:

SELECT COUNT(*) totalCount,
         sum(nvl(b.giftCardTotal, 0)) giftCardTotal,
         sum(NVL(b.commodity_total, a.commodity_total * 0.01)) allAmount,
         sum(nvl(f.cargo_freight, 0)) * 0.01 cargoFreight,
         sum(nvl(a.gift_use_value, 0)) * 0.01 giftUseValue,
         sum(nvl(a.cash_use_value, 0)) * 0.01 cashUseValue,
         sum(nvl(a.cdkey_use_value, 0)) * 0.01 cdkeyUseValue,
         sum(b.commodityCostTotal) commodityCostTotal,
         sum(b.cargoFreighCostTotal) * 0.01 cargoFreighCostTotal
          FROM order_main a
          JOIN (SELECT a.order_id,
                 SUM(a.commodity_num) commodity_total_num,
                 SUM(ROUND(a.commodity_num * a.commodity_price *
                           0.0001,
                           2)) commodity_total,
                 SUM(ROUND((case
                             when b.business_type_code = '30' then
                              a.commodity_num * a.commodity_price
                             else
                              0
                           end) * 0.0001,
                           2)) giftCardTotal,
                 SUM(ROUND(nvl(a.commodity_num *
                               a.commodity_cost_price * 0.0001,
                               0),
                           2)) commodityCostTotal,
                 SUM(nvl(a.cargo_freigh_cost, 0)) cargoFreighCostTotal
            FROM Order_Commodity a, commodity_info b
           WHERE a.shop_id = b.shop_id(+)
             AND a.commodity_code = b.commodity_code(+)
           GROUP BY a.order_id) b ON a.order_id = b.order_id
          LEFT JOIN shop_info c ON a.shop_id = c.shop_id
          LEFT JOIN access_mode d ON a.access_id = d.access_id
          LEFT JOIN bill_main e ON a.order_id = e.order_id
          LEFT JOIN delivery_records f ON a.order_id = f.order_id
         where 1 = 1
           and a.order_start_time >=
               to_date('2012-09-25 00:00:00', 'yyyy-MM-dd hh24:mi:ss')
           and a.order_start_time <
               to_date('2012-09-26 00:00:00', 'yyyy-MM-dd hh24:mi:ss')
           AND a.order_State_Code IN ('16', '11', '14')


执行计划的截图:
  


大家看到了这个是一个订单的主表,很多统计和查询都是和这个表相关的,现在用起来非常慢,需要进行调优,但不知道怎么下手!

论坛徽章:
0
2 [报告]
发表于 2012-09-25 17:05 |只看该作者
数据库的相关参数
NAME        VALUE
O7_DICTIONARY_ACCESSIBILITY        FALSE
active_instance_count       
aq_tm_processes        0
archive_lag_target        0
asm_diskgroups       
asm_diskstring       
asm_power_limit        1
audit_file_dest        E:\ORACLE\PRODUCT\10.2.0\ADMIN\ORCL\ADUMP
audit_sys_operations        FALSE
audit_trail        NONE
background_core_dump        partial
background_dump_dest        E:\ORACLE\PRODUCT\10.2.0\ADMIN\ORCL\BDUMP
backup_tape_io_slaves        FALSE
bitmap_merge_area_size        1048576
blank_trimming        FALSE
buffer_pool_keep       
buffer_pool_recycle       
circuits       
cluster_database        FALSE
cluster_database_instances        1
cluster_interconnects       
commit_point_strength        1
commit_write       
compatible        10.2.0.3.0
control_file_record_keep_time        7
control_files        E:\ORACLE\PRODUCT\10.2.0\ORCL\CONTROL01.CTL, E:\ORACLE\PRODUCT\10.2.0\ORCL\CONTROL02.CTL, E:\ORACLE\PRODUCT\10.2.0\ORCL\CONTROL03.CTL
core_dump_dest        E:\ORACLE\PRODUCT\10.2.0\ADMIN\ORCL\CDUMP
cpu_count        4
create_bitmap_area_size        8388608
create_stored_outlines       
cursor_sharing        EXACT
cursor_space_for_time        FALSE
db_16k_cache_size        0
db_2k_cache_size        0
db_32k_cache_size        0
db_4k_cache_size        0
db_8k_cache_size        0
db_block_buffers        0
db_block_checking        FALSE
db_block_checksum        TRUE
db_block_size        8192
db_cache_advice        ON
db_cache_size        637534208
db_create_file_dest       
db_create_online_log_dest_1       
db_create_online_log_dest_2       
db_create_online_log_dest_3       
db_create_online_log_dest_4       
db_create_online_log_dest_5       
db_domain       
db_file_multiblock_read_count        16
db_file_name_convert       
db_files        200
db_flashback_retention_target        1440
db_keep_cache_size        0
db_name        orcl
db_recovery_file_dest        E:\oracle\product\10.2.0\flash_recovery_area
db_recovery_file_dest_size        2147483648
db_recycle_cache_size        0
db_unique_name        orcl
db_writer_processes        1
dbwr_io_slaves        0
ddl_wait_for_locks        FALSE
dg_broker_config_file1        E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\DR1ORCL.DAT
dg_broker_config_file2        E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\DR2ORCL.DAT
dg_broker_start        FALSE
disk_asynch_io        TRUE
dispatchers        (PROTOCOL=TCP) (SERVICE=orclXDB)
distributed_lock_timeout        60
dml_locks        748
drs_start        FALSE
event       
fal_client       
fal_server       
fast_start_io_target        0
fast_start_mttr_target        0
fast_start_parallel_rollback        LOW
file_mapping        FALSE
fileio_network_adapters       
filesystemio_options       
fixed_date       
gc_files_to_locks       
gcs_server_processes        0
global_context_pool_size       
global_names        FALSE
hash_area_size        131072
hi_shared_memory_address        0
hs_autoregister        TRUE
ifile       
instance_groups       
instance_name        orcl
instance_number        0
instance_type        RDBMS
java_max_sessionspace_size        0
java_pool_size        0
java_soft_sessionspace_limit        0
job_queue_processes        10
large_pool_size        0
ldap_directory_access        NONE
license_max_sessions        0
license_max_users        0
license_sessions_warning        0
local_listener       
lock_name_space       
lock_sga        FALSE
log_archive_config       
log_archive_dest       
log_archive_dest_1       
log_archive_dest_10       
log_archive_dest_2       
log_archive_dest_3       
log_archive_dest_4       
log_archive_dest_5       
log_archive_dest_6       
log_archive_dest_7       
log_archive_dest_8       
log_archive_dest_9       
log_archive_dest_state_1        enable
log_archive_dest_state_10        enable
log_archive_dest_state_2        enable
log_archive_dest_state_3        enable
log_archive_dest_state_4        enable
log_archive_dest_state_5        enable
log_archive_dest_state_6        enable
log_archive_dest_state_7        enable
log_archive_dest_state_8        enable
log_archive_dest_state_9        enable
log_archive_duplex_dest       
log_archive_format        ARC%S_%R.%T
log_archive_local_first        TRUE
log_archive_max_processes        2
log_archive_min_succeed_dest        1
log_archive_start        FALSE
log_archive_trace        0
log_buffer        14262272
log_checkpoint_interval        0
log_checkpoint_timeout        1800
log_checkpoints_to_alert        FALSE
log_file_name_convert       
logmnr_max_persistent_sessions        1
max_commit_propagation_delay        0
max_dispatchers       
max_dump_file_size        UNLIMITED
max_enabled_roles        150
max_shared_servers       
object_cache_max_size_percent        10
object_cache_optimal_size        102400
olap_page_pool_size        0
open_cursors        300
open_links        4
open_links_per_instance        4
optimizer_dynamic_sampling        2
optimizer_features_enable        10.2.0.4
optimizer_index_caching        80
optimizer_index_cost_adj        10
optimizer_mode        ALL_ROWS
optimizer_secure_view_merging        TRUE
os_authent_prefix        OPS$
os_roles        FALSE
parallel_adaptive_multi_user        TRUE
parallel_automatic_tuning        FALSE
parallel_execution_message_size        2152
parallel_instance_group       
parallel_max_servers        80
parallel_min_percent        0
parallel_min_servers        0
parallel_server        FALSE
parallel_server_instances        1
parallel_threads_per_cpu        2
pga_aggregate_target        436207616
plsql_ccflags       
plsql_code_type        INTERPRETED
plsql_compiler_flags        INTERPRETED, NON_DEBUG
plsql_debug        FALSE
plsql_native_library_dir       
plsql_native_library_subdir_count        0
plsql_optimize_level        2
plsql_v2_compatibility        FALSE
plsql_warnings        DISABLE:ALL
pre_11g_enable_capture        FALSE
pre_page_sga        FALSE
processes        150
query_rewrite_enabled        TRUE
query_rewrite_integrity        enforced
rdbms_server_dn       
read_only_open_delayed        FALSE
recovery_parallelism        0
recyclebin        on
remote_archive_enable        TRUE
remote_dependencies_mode        TIMESTAMP
remote_listener       
remote_login_passwordfile        EXCLUSIVE
remote_os_authent        FALSE
remote_os_roles        FALSE
replication_dependency_tracking        TRUE
resource_limit        FALSE
resource_manager_plan       
resumable_timeout        0
rollback_segments       
serial_reuse        disable
service_names        orcl
session_cached_cursors        300
session_max_open_files        10
sessions        170
sga_max_size        1577058304
sga_target        1325400064
shadow_core_dump        partial
shared_memory_address        0
shared_pool_reserved_size        26843545
shared_pool_size        536870912
shared_server_sessions       
shared_servers        1
skip_unusable_indexes        TRUE
smtp_out_server       
sort_area_retained_size        0
sort_area_size        65536
spfile        E:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\SPFILEORCL.ORA
sql92_security        FALSE
sql_trace        FALSE
sql_version        NATIVE
sqltune_category        DEFAULT
standby_archive_dest        %ORACLE_HOME%\RDBMS
standby_file_management        MANUAL
star_transformation_enabled        FALSE
statistics_level        TYPICAL
streams_pool_size        0
tape_asynch_io        TRUE
thread        0
timed_os_statistics        0
timed_statistics        TRUE
trace_enabled        TRUE
tracefile_identifier       
transactions        187
transactions_per_rollback_segment        5
undo_management        AUTO
undo_retention        900
undo_tablespace        UNDOTBS1
use_indirect_data_buffers        FALSE
user_dump_dest        E:\ORACLE\PRODUCT\10.2.0\ADMIN\ORCL\UDUMP
utl_file_dir       
workarea_size_policy        AUTO

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2013-02-21 20:03 |只看该作者
分区表,索引
数据数
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP