Uploaded image for project: 'Apache Trafodion (Retired)'
  1. Apache Trafodion (Retired)
  2. TRAFODION-1053

LP Bug: 1430938 - In full explain output, begin/end key for char/varchar key column should be min/max if there is no predicated defined on the key column.

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • None
    • 2.4
    • sql-cmp
    • None

    Description

      In full explain output, begin/end key for char/varchar key column should be min/max
      if there is no predicated defined on the key column.

      Snippet from TRAFODION_SCAN below:

      key_columns ............ SALT, COLTS, COLVCHRUCS2, COLINTS
      begin_key .............. (SALT = %(9)), (COLTS = <min>),
      (COLVCHRUCS2 = '洼硡'), (COLINTS = <min>)
      end_key ................ (SALT = %(9)), (COLTS = <max>),
      (COLVCHRUCS2 = '洼湩'), (COLINTS = <max>)

      Expected (COLVCHRUCS2 = '<min>') and (COLVCHRUCS2 = '<max>').

      SQL>create table salttbl3 (
      +>colintu int unsigned not null, colints int signed not null,
      +>colsintu smallint unsigned not null, colsints smallint signed not null,
      +>collint largeint not null, colnum numeric(11,3) not null,
      +>colflt float not null, coldec decimal(11,2) not null,
      +>colreal real not null, coldbl double precision not null,
      +>coldate date not null, coltime time not null,
      +>colts timestamp not null,
      +>colchriso char(90) character set iso88591 not null,
      +>colchrucs2 char(111) character set ucs2 not null,
      +>colvchriso varchar(113) character set iso88591 not null,
      +>colvchrucs2 varchar(115) character set ucs2 not null,
      +>PRIMARY KEY (colts ASC, colvchrucs2 DESC, colints ASC))
      +>SALT USING 9 PARTITIONS ON (colints, colvchrucs2, colts);

      — SQL operation complete.

      SQL>LOAD INTO salttbl3 SELECT
      +>c1+c2*10+c3*100+c4*1000+c5*10000,
      +>(c1+c2*10+c3*100+c4*1000+c5*10000) - 50000,
      +>mod(c1+c2*10+c3*100+c4*1000+c5*10000, 65535),
      +>mod(c1+c2*10+c3*100+c4*1000+c5*10000, 32767),
      +>(c1+c2*10+c3*100+c4*1000+c5*10000) + 549755813888,
      +>cast(c1+c2*10+c3*100+c4*1000+c5*10000 as numeric(11,3)),
      +>cast(c1+c2*10+c3*100+c4*1000+c5*10000 as float),
      +>cast(c1+c2*10+c3*100+c4*1000+c5*10000 as decimal(11,2)),
      +>cast(c1+c2*10+c3*100+c4*1000+c5*10000 as real),
      +>cast(c1+c2*10+c3*100+c4*1000+c5*10000 as double precision),
      +>cast(converttimestamp(210614299200000000 +
      +>(86400000000 * (c1+c2*10+c3*100+c4*1000+c5*10000))) as date),
      +>time'00:00:00' + cast(mod(c1+c2*10+c3*100+c4*1000+c5*10000,3)
      +>as interval minute),
      +>converttimestamp(210614299200000000 + (86400000000 *
      +>(c1+c2*10+c3*100+c4*1000+c5*10000)) + (1000000 * (c1+c2*10+c3*100)) +
      +>(60000000 * (c1+c2*10)) + (3600000000 * (c1+c2*10))),
      +>cast(c1+c2*10+c3*100+c4*1000+c5*10000 as char(90) character set iso88591),
      +>cast(c1+c2*10+c3*100+c4*1000+c5*10000 as char(111) character set ucs2),
      +>cast(c1+c2*10+c3*100+c4*1000+c5*10000 as varchar(113) character set iso88591),
      +>cast(c1+c2*10+c3*100+c4*1000+c5*10000 as varchar(115) character set ucs2)
      +>from (values(1)) t
      +>transpose 0,1,2,3,4,5,6,7,8,9 as c1
      +>transpose 0,1,2,3,4,5,6,7,8,9 as c2
      +>transpose 0,1,2,3,4,5,6,7,8,9 as c3
      +>transpose 0,1,2,3,4,5,6,7,8,9 as c4
      +>transpose 0,1,2,3,4,5,6,7,8,9 as c5;

      UTIL_OUTPUT
      --------------------------------------------------------------------------------------------------------------------------------
      Task: LOAD Status: Started Object: TRAFODION.SEABASE.SALTTBL3
      Task: CLEANUP Status: Started Object: TRAFODION.SEABASE.SALTTBL3
      Task: CLEANUP Status: Ended Object: TRAFODION.SEABASE.SALTTBL3
      Task: DISABLE INDEXE Status: Started Object: TRAFODION.SEABASE.SALTTBL3
      Task: DISABLE INDEXE Status: Ended Object: TRAFODION.SEABASE.SALTTBL3
      Task: PREPARATION Status: Started Object: TRAFODION.SEABASE.SALTTBL3
      Rows Processed: 100000
      Task: PREPARATION Status: Ended ET: 00:00:10.332
      Task: COMPLETION Status: Started Object: TRAFODION.SEABASE.SALTTBL3
      Task: COMPLETION Status: Ended ET: 00:00:02.941
      Task: POPULATE INDEX Status: Started Object: TRAFODION.SEABASE.SALTTBL3
      Task: POPULATE INDEX Status: Ended ET: 00:00:05.357

      — SQL operation complete.

      SQL>update statistics for table salttbl3 ON EVERY KEY SAMPLE RANDOM 20 PERCENT;

      — SQL operation complete.

      SQL>prepare XX from select count from salttbl3 where "SALT" = 9;

      — SQL command prepared.

      SQL>explain XX;

      ------------------------------------------------------------------ PLAN SUMMARY
      MODULE_NAME .............. DYNAMICALLY COMPILED
      STATEMENT_NAME ........... XX
      PLAN_ID .................. 212292724720044885
      ROWS_OUT ................. 1
      EST_TOTAL_COST ........... 0.01
      STATEMENT ................ select count from salttbl3 where "SALT" = 9

      ------------------------------------------------------------------ NODE LISTING
      ROOT ====================================== SEQ_NO 3 ONLY CHILD 2
      REQUESTS_IN .............. 1
      ROWS_OUT ................. 1
      EST_OPER_COST ............ 0
      EST_TOTAL_COST ........... 0.01
      DESCRIPTION
      max_card_est ........... 1
      fragment_id ............ 0
      parent_frag ............ (none)
      fragment_type .......... master
      statement_index ........ 0
      affinity_value ......... 0
      max_max_cardinality ... 10
      total_overflow_size .... 0.00 KB
      xn_access_mode ......... read_only
      xn_autoabort_interval 0
      auto_query_retry ....... enabled
      plan_version ....... 2,600
      embedded_arkcmp ........ used
      LDAP_USERNAME .......... DONTCARE
      ObjectUIDs ............. 477441946105369718
      select_list ............ count(1 )
      input_variables ........ %(9)

      SORT_SCALAR_AGGR ========================== SEQ_NO 2 ONLY CHILD 1
      REQUESTS_IN .............. 1
      ROWS_OUT ................. 1
      EST_OPER_COST ............ 0.01
      EST_TOTAL_COST ........... 0.01
      DESCRIPTION
      max_card_est ........... 1
      fragment_id ............ 0
      parent_frag ............ (none)
      fragment_type .......... master
      aggregates ............. count(1 )

      TRAFODION_SCAN ============================ SEQ_NO 1 NO CHILDREN
      TABLE_NAME ............... SALTTBL3
      REQUESTS_IN .............. 1
      ROWS_OUT ................ 10
      EST_OPER_COST ............ 0.01
      EST_TOTAL_COST ........... 0.01
      DESCRIPTION
      max_card_est .......... 99
      fragment_id ............ 0
      parent_frag ............ (none)
      fragment_type .......... master
      scan_type .............. subset scan of table TRAFODION.SEABASE.SALTTBL3
      object_type ............ Trafodion
      cache_size ........... 100
      probes ................. 1
      rows_accessed ......... 10
      key_columns ............ SALT, COLTS, COLVCHRUCS2, COLINTS
      begin_key .............. (SALT = %(9)), (COLTS = <min>),
      (COLVCHRUCS2 = '洼硡'), (COLINTS = <min>)
      end_key ................ (SALT = %(9)), (COLTS = <max>),
      (COLVCHRUCS2 = '洼湩'), (COLINTS = <max>)

      — SQL operation complete.

      To reproduce:
      drop table salttbl3 cascade;
      create table salttbl3 (
      colintu int unsigned not null, colints int signed not null,
      colsintu smallint unsigned not null, colsints smallint signed not null,
      collint largeint not null, colnum numeric(11,3) not null,
      colflt float not null, coldec decimal(11,2) not null,
      colreal real not null, coldbl double precision not null,
      coldate date not null, coltime time not null,
      colts timestamp not null,
      colchriso char(90) character set iso88591 not null,
      colchrucs2 char(111) character set ucs2 not null,
      colvchriso varchar(113) character set iso88591 not null,
      colvchrucs2 varchar(115) character set ucs2 not null,
      PRIMARY KEY (colts ASC, colvchrucs2 DESC, colints ASC))
      SALT USING 9 PARTITIONS ON (colints, colvchrucs2, colts);

      LOAD INTO salttbl3 SELECT
      c1+c2*10+c3*100+c4*1000+c5*10000,
      (c1+c2*10+c3*100+c4*1000+c5*10000) - 50000,
      mod(c1+c2*10+c3*100+c4*1000+c5*10000, 65535),
      mod(c1+c2*10+c3*100+c4*1000+c5*10000, 32767),
      (c1+c2*10+c3*100+c4*1000+c5*10000) + 549755813888,
      cast(c1+c2*10+c3*100+c4*1000+c5*10000 as numeric(11,3)),
      cast(c1+c2*10+c3*100+c4*1000+c5*10000 as float),
      cast(c1+c2*10+c3*100+c4*1000+c5*10000 as decimal(11,2)),
      cast(c1+c2*10+c3*100+c4*1000+c5*10000 as real),
      cast(c1+c2*10+c3*100+c4*1000+c5*10000 as double precision),
      cast(converttimestamp(210614299200000000 +
      (86400000000 * (c1+c2*10+c3*100+c4*1000+c5*10000))) as date),
      time'00:00:00' + cast(mod(c1+c2*10+c3*100+c4*1000+c5*10000,3)
      as interval minute),
      converttimestamp(210614299200000000 + (86400000000 *
      (c1+c2*10+c3*100+c4*1000+c5*10000)) + (1000000 * (c1+c2*10+c3*100)) +
      (60000000 * (c1+c2*10)) + (3600000000 * (c1+c2*10))),
      cast(c1+c2*10+c3*100+c4*1000+c5*10000 as char(90) character set iso88591),
      cast(c1+c2*10+c3*100+c4*1000+c5*10000 as char(111) character set ucs2),
      cast(c1+c2*10+c3*100+c4*1000+c5*10000 as varchar(113) character set iso88591),
      cast(c1+c2*10+c3*100+c4*1000+c5*10000 as varchar(115) character set ucs2)
      from (values(1)) t
      transpose 0,1,2,3,4,5,6,7,8,9 as c1
      transpose 0,1,2,3,4,5,6,7,8,9 as c2
      transpose 0,1,2,3,4,5,6,7,8,9 as c3
      transpose 0,1,2,3,4,5,6,7,8,9 as c4
      transpose 0,1,2,3,4,5,6,7,8,9 as c5;

      update statistics for table salttbl3 ON EVERY KEY SAMPLE RANDOM 20 PERCENT;

      prepare XX from select count from salttbl3 where "SALT" = 9;
      explain XX;

      Attachments

        Activity

          People

            suresh_subbiah Suresh Subbiah
            thaiju Julie Thai
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated: