OceanBase
English日本語简体中文
Docs Home
Products
Integrations
Release Notes

Databases

OceanBase DatabaseOceanBase Cloud OceanBase Best Practices

Tools

OceanBase Cloud PlatformOceanBase Migration ServiceOceanBase Developer CenterOceanBase Migration AssessmentOceanBase Admin ToolOceanBase Loader and DumperOceanBase DeployerKubernetes operator for OceanBaseOceanBase Diagnostic Tool OceanBase Binlog Service

Connectors and Middleware

OceanBase Database Proxy OceanBase Connector/C OceanBase Connector/J OceanBase Connector/ODBC OceanBase Connector/NETOceanBase Command-Line Client

Databases

OceanBase DatabaseOceanBase Cloud OceanBase Best Practices

Connectors and Middleware

OceanBase Database Proxy OceanBase Connector/C OceanBase Connector/J OceanBase Connector/ODBC OceanBase Connector/NETOceanBase Command-Line Client

Tools

OceanBase Cloud PlatformOceanBase Migration ServiceOceanBase Developer CenterOceanBase Migration AssessmentOceanBase Admin ToolOceanBase Loader and DumperOceanBase DeployerKubernetes operator for OceanBaseOceanBase Diagnostic Tool OceanBase Binlog Service
OceanBase DatabaseOceanBase Cloud ToolsConnectors and MiddlewareLifecycle Support Policy

OceanBase Database Proxy

V4.4.0
  • What is ODP?
  • Installation and deployment
    • Overview
    • Deploy ODP by using obd
    • Deploy ODP by using OCP
    • Deploy ODP by using the CLI
    • Deployment modes
  • Basic operations
  • Configuration parameter
    • View and modify parameters
    • Parameter summary
    • Global parameters
      • automatic_match_work_thread
      • block_thread_num
      • cache_cleaner_clean_interval
      • check_tenant_locality_change
      • client_max_connections
      • client_max_memory_size
      • client_session_id_version
      • client_sock_option_flag_out
      • client_tcp_keepcnt
      • client_tcp_keepidle
      • client_tcp_keepintvl
      • client_tcp_user_timeout
      • cluster_count_high_water_mark
      • cluster_expire_time
      • config_server_refresh_interval
      • congestion_fail_window
      • congestion_failure_threshold
      • congestion_retry_interval
      • connection_diagnosis_option
      • connection_pool_mode
      • connect_observer_max_retries
      • current_local_config_version
      • default_buffer_water_mark
      • default_inactivity_timeout
      • delay_exit_time
      • delay_update_entry_interval
      • detect_server_timeout
      • digest_sql_length
      • enable_abort_conn_info
      • enable_async_log
      • enable_async_pull_location_cache
      • enable_auto_restart
      • enable_bad_route_reject
      • enable_binlog_service
      • enable_cached_server
      • enable_causal_order_read
      • enable_client_connection_lru_disconnect
      • enable_client_ip_checkout
      • enable_cluster_checkout
      • enable_compression_protocol
      • enable_congestion
      • enable_connection_diagnosis
      • enable_cpu_isolate
      • enable_cpu_topology
      • enable_crash_error_log
      • enable_cross_shard_txn
      • enable_extra_prometheus_metric
      • enable_flow_control
      • enable_full_link_trace
      • enable_full_username
      • enable_get_rslist_remote
      • enable_global_ps_cache
      • enable_index_route
      • enable_monitor_stat
      • enable_ob_protocol_v2
      • enable_obproxy_rpc_service
      • enable_partition_table_route
      • enable_performance_mode
      • enable_pl_route
      • enable_primary_zone
      • enable_prometheus
      • enable_proxy_scramble
      • enable_qa_mode
      • enable_qos
      • enable_report_session_stats
      • enable_reroute
      • enable_scan_all_request
      • enable_sequence_prefetch
      • enable_sharding
      • enable_single_leader_node_routing
      • enable_standby
      • enable_stat
      • enable_strict_kernel_release
      • enable_strict_stat_time
      • enable_sync_all_stats
      • enable_syslog_file_compress
      • enable_syslog_wf
      • enable_trace
      • enable_trace_stats
      • enable_trans_detail_stats
      • enable_transaction_internal_routing
      • enable_xa_route
      • fetch_proxy_bin_random_time
      • fetch_proxy_bin_timeout
      • flow_consumer_reenable_threshold
      • flow_event_queue_threshold
      • flow_high_water_mark
      • flow_low_water_mark
      • grpc_client_num
      • grpc_thread_num
      • hot_upgrade_exit_timeout
      • hot_upgrade_failure_retries
      • hot_upgrade_rollback_timeout
      • idc_list_refresh_interval
      • ignore_local_config
      • internal_cmd_mem_limited
      • ip_listen_mode
      • is_need_skip_delay_interval_schema_changed
      • ldg_info_refresh_interval
      • listen_port
      • local_bound_ip
      • local_bound_ipv6_ip
      • log_cleanup_interval
      • log_dir_size_threshold
      • log_file_percentage
      • long_async_task_timeout
      • max_log_file_size
      • max_syslog_file_count
      • max_syslog_file_time
      • mem_leak_check_class_name
      • mem_leak_check_mod_name
      • metadb_server_state_refresh_interval
      • min_congested_connect_timeout
      • min_keep_congestion_interval
      • monitor_cost_ms_unit
      • monitor_item_limit
      • monitor_item_max_idle_period
      • monitor_log_level
      • monitor_stat_dump_interval
      • monitor_stat_high_threshold
      • monitor_stat_low_threshold
      • monitor_stat_middle_threshold
      • need_convert_vip_to_tname
      • net_accept_threads
      • net_config_poll_timeout
      • normal_pl_update_threshold
      • obproxy_config_server_url
      • obproxy_sys_password
      • partition_location_expire_relative_time
      • prometheus_cost_ms_unit
      • prometheus_listen_port
      • prometheus_sync_interval
      • protocol_diagnosis_level
      • proxy_cluster
      • proxy_hot_upgrade_check_interval
      • proxy_id
      • proxy_info_check_interval
      • proxy_local_cmd
      • proxy_mem_limited
      • qa_mode_mock_public_cloud_slb_addr
      • qos_stat_clean_interval
      • qos_stat_item_limit
      • refresh_idc_list
      • refresh_json_config
      • refresh_rslist
      • request_buffer_length
      • rootservice_list
      • rpc_client_net_write_timeout
      • rpc_client_net_read_timeout
      • rpc_async_pull_batch_max_size
      • rpc_async_task_thread_num
      • rpc_ctx_expire_time
      • routing_cache_mem_limited
      • rpc_enable_async_analyze
      • rpc_enable_async_pull_batch_tablets
      • rpc_async_pull_batch_max_times
      • rpc_async_pull_batch_wait_interval
      • rpc_enable_direct_expire_route_entry
      • rpc_enable_congestion
      • rpc_enable_lower_case_table_names
      • rpc_enable_global_index
      • rpc_enable_force_srv_black_list
      • rpc_enable_requestsm_info
      • rpc_enable_reroute
      • rpc_enable_parallel_handler
      • rpc_enable_retry_request_info_log
      • rpc_force_use_original_redis_protocol
      • rpc_enable_sub_req_log
      • rpc_force_srv_black_list
      • rpc_listen_port
      • rpc_max_request_batch_size
      • rpc_max_response_batch_size
      • rpc_max_server_table_entry_num
      • rpc_net_timeout_base
      • rpc_partition_calc_max_retries
      • rpc_redis_operation_timeout
      • rpc_request_server_entry_max_retries
      • rpc_request_timeout
      • rpc_request_max_retries
      • rpc_redis_default_database_name
      • rpc_redis_max_monitor_num
      • rpc_period_task_interval
      • rpc_redis_default_user_name
      • rpc_request_retry_waiting_time
      • rpc_server_entry_expire_time
      • rpc_request_timeout_delta
      • rpc_server_net_invalid_time_us
      • rpc_server_net_handler_expire_time
      • rpc_srv_session_pool_inactive_timeout
      • rpc_service_mode
      • rpc_server_net_max_pending_request
      • rpc_sub_request_isolation_mode
      • rpc_support_key_partition_shard_request
      • rpc_sub_request_weight
      • rpc_sub_req_max_retries
      • scan_buffered_rows_warning_threshold
      • sequence_entry_expire_time
      • sequence_fail_retry_count
      • sequence_prefetch_threshold
      • server_detect_fail_threshold
      • server_detect_mode
      • server_detect_refresh_interval
      • server_protocol
      • server_routing_mode
      • server_state_refresh_interval
      • server_tcp_init_cwnd
      • server_tcp_keepcnt
      • server_tcp_keepidle
      • server_tcp_keepintvl
      • server_tcp_user_timeout
      • session_pool_idle_timeout
      • session_pool_reset_interval
      • session_pool_stat_log_interval
      • session_pool_thread_num
      • session_pool_thread_schedule_interval
      • shard_scan_thread_num
      • short_async_task_timeout
      • skip_proxy_sys_private_check
      • skip_proxyro_check
      • slow_proxy_process_time_threshold
      • slow_transaction_time_threshold
      • sock_option_flag_out
      • sock_packet_mark_out
      • sock_packet_tos_out
      • sock_recv_buffer_size_out
      • sock_send_buffer_size_out
      • sql_table_cache_expire_relative_time
      • sql_table_cache_mem_limited
      • sqlaudit_mem_limited
      • stack_size
      • stat_dump_interval
      • stat_table_sync_interval
      • syslog_io_bandwidth_limit
      • syslog_level
      • table_entry_retry_build_limit
      • task_thread_num
      • tenant_location_valid_time
      • tunnel_request_size_threshold
      • username_separator
      • work_thread_num
      • xflush_log_level
    • Multi-level parameters
      • binlog_service_ip
      • compression_algorithm
      • enable_check_cluster_name
      • enable_client_ssl
      • enable_cloud_full_username
      • enable_read_write_split
      • enable_rpc_throttle
      • enable_server_ssl
      • enable_standby_read_write_split
      • enable_transaction_split
      • enable_weak_reroute
      • init_sql
      • mysql_version
      • ob_max_read_stale_time
      • obproxy_force_parallel_query_dop
      • obproxy_read_consistency
      • obproxy_read_only
      • observer_query_timeout_delta
      • observer_sys_password
      • observer_sys_password1
      • proxy_idc_name
      • proxy_primary_zone_name
      • proxy_route_policy
      • proxy_tenant_name
      • query_digest_time_threshold
      • read_stale_retry_interval
      • rootservice_cluster_name
      • route_diagnosis_level
      • rpc_request_throttle_waiting_time
      • rpc_throttle_limit_qps_qa
      • route_target_replica_type
      • rpc_throttle_trigger_percentage
      • slow_query_time_threshold
      • sql_firewall_config
      • ssl_attributes
      • target_db_server
      • weakread_weight_zone
  • Connection management
    • Principles
    • Session status synchronization
    • Configure a globally unique client session ID
    • Client session
    • Server session
    • Network connection
    • Session connection pool
  • Data routing
    • Factors affecting data routing
    • ODP routing
    • Intra-tenant routing
      • Overview
      • IP address-based routing
      • Partitioned table-based routing for strong-consistency reads
      • Global index table-based routing for strong-consistency reads
      • Replicated table-based routing for strong-consistency reads
      • Primary zone-based routing for strong-consistency reads
      • Strategy-based routing
      • Distributed transaction routing
      • Rerouting
      • Forcible routing
      • Weight-based load-balanced routing
      • Equality derivation for partition calculation
    • Automatic routing to the primary/standby tenants
    • Read/Write separation
    • Follower latency threshold
    • Function partition key routing
      • Overview
      • String functions
      • Numeric calculation functions
      • Date calculation functions
      • FAQ
    • Character set-based routing
    • Partitioning key types supported for routing by ODP
  • Logs
    • Overview
    • obproxy_diagnosis.log
    • obproxy_digest.log
    • obproxy_error.log
    • obproxy_slow.log
    • obproxy_stat.log
    • obproxy.log
  • Commands
    • Overview
    • Dedicated ODP commands
      • ALTER
      • KILL
        • KILL GLOBALSESSION
        • KILL PROXYSESSION
      • ping
      • SHOW
        • SHOW
        • SHOW GLOBALSESSION
        • SHOW PROXYPS
    • Compatible MySQL commands
      • BINLOG
      • KILL
      • SHOW PROCESSLIST
      • SHOW RELAYLOG EVENTS
      • SHOW SLAVE HOSTS
  • High availability mechanism
    • Overview
    • High availability of ODP services
    • High availability of OceanBase Database
    • High availability testing
  • OBKV
    • RPC service port
    • Throttling
  • Security and protocols
  • Operation and maintenance
    • Troubleshooting logic
    • Performance analysis
    • Show Trace
    • Routing diagnostics
      • Overview
      • Obtain diagnostic information
      • Diagnostic point troubleshooting
        • Overview
        • SQL_PARSE
        • ROUTE_INFO
        • LOCATION_CACHE_LOOKUP
        • ROUTINE_ENTRY_LOOKUP_DONE
        • FETCH_TABLE_RELATED_DATA
        • TABLE_ENTRY_LOOKUP_DONE
        • EXPR_PARSE
        • CALC_ROWID
        • RESOLVE_TOKEN
        • RESOLVE_EXPR
        • CALC_PARTITION_ID
        • PARTITION_ID_CALC_DONE
        • PARTITION_ENTRY_LOOKUP_DONE
        • ROUTE_POLICY
        • CONGESTION_CONTROL
        • RETRY
        • HANDLE_RESPONSE
      • Examples
    • Memory leak diagnostics
    • Connection diagnostics
    • Prometheus monitoring
    • SQL firewall
  • Release Notes
    • Version number rules
    • Enterprise Edition
      • V4.3
        • OceanBase Database Proxy Enterprise Edition V4.3.6
        • OceanBase Database Proxy Enterprise Edition V4.3.5
        • OceanBase Database Enterprise Edition V4.3.4
        • ODP Enterprise Edition V4.3.3
        • ODP Enterprise Edition V4.3.2
        • ODP Enterprise Edition V4.3.1
        • ODP Enterprise Edition V4.3.0
      • V4.2
        • ODP Enterprise Edition V4.2.3
        • ODP Enterprise Edition V4.2.2
        • ODP Enterprise Edition V4.2.1
      • V4.1
        • ODP Enterprise Edition V4.1.0
      • V4.0
        • ODP Enterprise Edition V4.0.0
      • V3.2
        • ODP Enterprise Edition V3.2.11
        • ODP Enterprise Edition V3.2.3.5
    • Community Edition
      • V4.3
        • OceanBase Database Proxy Community Edition V4.3.6
        • OceanBase Database Proxy Community Edition V4.3.5
        • OceanBase Database Proxy Community Edition V4.3.4
        • ODP Community Edition V4.3.3
        • ODP Community Edition V4.3.2
        • ODP Community Edition V4.3.1
      • V4.2
        • ODP Community Edition V4.2.3
        • ODP Community Edition V4.2.1
        • ODP Community Edition V4.2.0
      • V4.1
        • ODP Community Edition V4.1.0
      • V4.0
        • ODP Community Edition V4.0.0

Download PDF

Document Feedback
  1. Documentation Center
  2. OceanBase Database Proxy
  3. V4.4.0

Equality derivation for partition calculation

Last Updated:2026-09-04 08:23:04

Background
Limits
Usage
Examples

Background

Before ODP V4.3.4, SQL such as the following could not derive the partition key from column equalities; the partition key and value had to appear explicitly:

-- Partition key of table t1 is C1
select * from t1 where C1 = C2 and C2 = 1

Starting with ODP V4.3.5, ODP derives equalities in SQL and uses them for partition calculation.

Limits

  • At most 1024 derived equalities per SQL statement.

  • Derivation supports =, <=>, and the first value of IN expressions—not greater/less relations.

  • Very complex SQL may not fully derive.

  • If SQL length exceeds request_buffer_length, the portion beyond the buffer may not participate in derivation.

Usage

Applies to partitioned tables of any partition type; enabled by default with no extra configuration. It is independent of multi-column partition routing, default-partition routing, generated-column routing, partition function routing, partition name routing, and partition hints; they generally do not interfere. SQL that needs multiple features together should still route and execute correctly.

Examples

Example 1: ordinary SQL with equality derivation

  1. Create a hash-partitioned table:

    obclient[test]> create table t1_hash(
        -> c1 int,
        -> c2 int,
        -> c3 int
        -> ) partition by hash (c1) partitions 4;
    
  2. Run EXPLAIN ROUTE:

    obclient[test]> explain route select * from t1_hash where c1 = c2 and c2 = c3 and c3 = 1\G
    

    Sample output:

    *************************** 1. row ***************************
    Route Plan:
    Trans Current Query:"explain route select * from t1_hash where c1 = c2 and c2 = c3 and c3 = 1"
    
    Route Prompts
    -----------------
    > ROUTE_INFO
      [INFO] Will do table partition location lookup to decide which OBServer to route to
    > ROUTE_POLICY
      [INFO] Will route to table's partition leader replica(127.0.0.1:2881) using route policy PRIMARY_ZONE_FIRST because query for STRONG read
    
    
    Route Plan
    -----------------
    > SQL_PARSE:{cmd:"OB_MYSQL_COM_QUERY", table:"t1_hash"}
    > ROUTE_INFO:{route_info_type:"USE_PARTITION_LOCATION_LOOKUP"}
    > LOCATION_CACHE_LOOKUP:{mode:"oceanbase"}
      > TABLE_ENTRY_LOOKUP_DONE:{table:"t1_hash", table_id:"500038", table_type:"USER TABLE", partition_num:4, entry_from_remote:false}
      > PARTITION_ID_CALC_START:{}
        > EXPR_PARSE:{col_val:"c1=,c2=,c3=1"}
          > RESOLVE_TOKEN:{token_type:"TOKEN_INT_VAL", resolve:"BIGINT:1", token:"1"}
        > CALC_PARTITION_ID:{part_description:"partition by hash(INT<binary>) partitions 4"}
      > PARTITION_ID_CALC_DONE:{partition_id:200014, level:1, partitions:"(p1)"}
      > PARTITION_ENTRY_LOOKUP_DONE:{leader:"127.0.0.1:2881", entry_from_remote:false}
    > ROUTE_POLICY:{route_policy:"", chosen_route_type:"ROUTE_TYPE_LEADER", type:"FULL"}
    

Example 2: generated column with equality derivation

  1. Create the table:

    obclient[test]> create table gen3(
        ->   c1 int,
        ->   c2 VARCHAR(20),
        ->   c3 VARCHAR(20),
        ->   c4 VARCHAR(20) GENERATED ALWAYS AS (substr(c3, 2)) VIRTUAL
        -> ) partition by list columns(c4, c1) (
        -> partition p0 values in (('ab',1), ('ab',2)),
        -> partition p1 values in (('cd',1), ('cd',2), ('cd',null)),
        -> partition p2 values in(default)
        -> );
    
  2. EXPLAIN ROUTE:

    obclient[test]> explain route select * from gen3 where c4 = c2 and c2 = 'ab' and c1 = a and a = 1\G
    

    Sample output:

    *************************** 1. row ***************************
    Route Plan:
    Trans Current Query:"explain route select * from gen3 where c4 = c2 and c2 = 'ab' and c1 = a and a = 1"
    
    Route Prompts
    -----------------
    > ROUTE_INFO
      [INFO] Will do table partition location lookup to decide which OBServer to route to
    > ROUTE_POLICY
      [INFO] Will route to table's partition leader replica(127.0.0.1:2881) using route policy PRIMARY_ZONE_FIRST because query for STRONG read
    
    
    Route Plan
    -----------------
    > SQL_PARSE:{cmd:"OB_MYSQL_COM_QUERY", table:"gen3"}
    > ROUTE_INFO:{route_info_type:"USE_PARTITION_LOCATION_LOOKUP"}
    > LOCATION_CACHE_LOOKUP:{mode:"oceanbase"}
      > TABLE_ENTRY_LOOKUP_DONE:{table:"gen3", table_id:"500049", table_type:"USER TABLE", partition_num:3, entry_from_remote:false}
      > PARTITION_ID_CALC_START:{}
        > EXPR_PARSE:{col_val:"c4=,c2=ab,c1=,a=1"}
          > RESOLVE_TOKEN:{token_type:"TOKEN_STR_VAL", resolve:"VARCHAR:ab<utf8mb4_general_ci>", token:"ab"}
          > RESOLVE_TOKEN:{token_type:"TOKEN_INT_VAL", resolve:"BIGINT:1", token:"1"}
        > CALC_PARTITION_ID:{part_description:"partition by list (P500050[(VARCHAR:cd<utf8mb4_general_ci>, NULL:NULL), (VARCHAR:cd<utf8mb4_general_ci>, BIGINT:1), (VARCHAR:cd<utf8mb4_general_ci>, BIGINT:2)], P500051[(VARCHAR:ab<utf8mb4_general_ci>, BIGINT:1), (VARCHAR:ab<utf8mb4_general_ci>, BIGINT:2)], P500052[(EXT:maxvalue)])"}
      > PARTITION_ID_CALC_DONE:{partition_id:200022, level:1, partitions:"(p1)"}
      > PARTITION_ENTRY_LOOKUP_DONE:{leader:"127.0.0.1:2881", entry_from_remote:false}
    > ROUTE_POLICY:{route_policy:"", chosen_route_type:"ROUTE_TYPE_LEADER", type:"FULL"}
    

Example 3: partition expression with equality derivation

  1. Create the table:

    obclient[test]> create table partition_test1 (c1 int, c2 int, c3 int) partition by hash(c1 + c2) partitions 8 subpartition by hash(c1 + c2 + 10 + c2 * c1) subpartitions 8;
    
  2. EXPLAIN ROUTE:

    obclient[test]> explain route  select * from partition_test1 where c1 = 4 and c2 = c3 and c3 = 4\G
    

    Sample output:

    *************************** 1. row ***************************
    Route Plan:
    Trans Current Query:"explain route  select * from partition_test1 where c1 = 4 and c2 = c3 and c3 = 4"
    
    Route Prompts
    -----------------
    > ROUTE_INFO
      [INFO] Will do table partition location lookup to decide which OBServer to route to
    > ROUTE_POLICY
      [INFO] Will route to table's partition leader replica(127.0.0.1:2881) using route policy PRIMARY_ZONE_FIRST because query for STRONG read
    
    
    Route Plan
    -----------------
    > SQL_PARSE:{cmd:"OB_MYSQL_COM_QUERY", table:"partition_test1"}
    > ROUTE_INFO:{route_info_type:"USE_PARTITION_LOCATION_LOOKUP"}
    > LOCATION_CACHE_LOOKUP:{mode:"oceanbase"}
      > TABLE_ENTRY_LOOKUP_START:{}
        > FETCH_TABLE_RELATED_DATA:{part_level:2, first part_expr:"c1 + c2", sub_part_expr:"c1 + c2 + 10 + c2 * c1"}
      > TABLE_ENTRY_LOOKUP_DONE:{table:"partition_test1", table_id:"500053", table_type:"USER TABLE", partition_num:64}
      > PARTITION_ID_CALC_START:{}
        > EXPR_PARSE:{col_val:"c1=4,c2=,c3=4"}
          > RESOLVE_TOKEN:{token_type:"TOKEN_INT_VAL", resolve:"BIGINT:4", token:"4"}
          > RESOLVE_TOKEN:{token_type:"TOKEN_INT_VAL", resolve:"BIGINT:4", token:"4"}
          > RESOLVE_TOKEN:{token_type:"TOKEN_NONE", resolve:"BIGINT:8", part_key_func:"OB_PROXY_EXPR_TYPE_FUNC_ADD"}
          > RESOLVE_TOKEN:{token_type:"TOKEN_NONE", resolve:"BIGINT:34", part_key_func:"OB_PROXY_EXPR_TYPE_FUNC_ADD"}
        > CALC_PARTITION_ID:{part_description:"partition by hash(INT<binary>) partitions 8 subpartition by hash(INT<binary>) partitions 8"}
      > PARTITION_ID_CALC_DONE:{partition_id:200026, level:2, partitions:"(p0sp2)"}
      > PARTITION_ENTRY_LOOKUP_DONE:{leader:"127.0.0.1:2881"}
    > ROUTE_POLICY:{route_policy:"", chosen_route_type:"ROUTE_TYPE_LEADER", type:"FULL"}
    

Example 4: datetime with equality derivation

  1. Create the table:

    obclient[test]> create table t_timestamp_range1(c1 DATE, c2 int, c3 int) partition by range(to_days(c1))
        -> (
        ->   partition p0 values less than (to_days('2024-04-01 00:00:00')),
        ->   partition p1 values less than (to_days('2024-08-01 00:00:00')),
        ->   partition p2 values less than (to_days('2024-12-01 00:00:00'))
        -> );
    
  2. EXPLAIN ROUTE:

    obclient[test]> explain route select * from t_timestamp_range1 where c1 = c2 and c2 = '2024-07-30 00:00:00'\G
    

    Sample output:

    *************************** 1. row ***************************
    Route Plan:
    Trans Current Query:"explain route select * from t_timestamp_range1 where c1 = c2 and c2 = '2024-07-30 00:00:00'"
    
    Route Prompts
    -----------------
    > ROUTE_INFO
      [INFO] Will do table partition location lookup to decide which OBServer to route to
    > ROUTE_POLICY
      [INFO] Will route to table's partition leader replica(127.0.0.1:2881) using route policy PRIMARY_ZONE_FIRST because query for STRONG read
    
    
    Route Plan
    -----------------
    > SQL_PARSE:{cmd:"OB_MYSQL_COM_QUERY", table:"t_timestamp_range1"}
    > ROUTE_INFO:{route_info_type:"USE_PARTITION_LOCATION_LOOKUP"}
    > LOCATION_CACHE_LOOKUP:{mode:"oceanbase"}
      > TABLE_ENTRY_LOOKUP_START:{}
        > FETCH_TABLE_RELATED_DATA:{part_level:1, first part_expr:"to_days(c1)"}
      > TABLE_ENTRY_LOOKUP_DONE:{table:"t_timestamp_range1", table_id:"500144", table_type:"USER TABLE", partition_num:3}
      > PARTITION_ID_CALC_START:{}
        > EXPR_PARSE:{col_val:"c1=,c2=2024-07-30 00:00:00"}
          > RESOLVE_TOKEN:{token_type:"TOKEN_STR_VAL", resolve:"VARCHAR:2024-07-30 00:00:00<utf8mb4_general_ci>", token:"2024-07-30 00:00:00"}
          > RESOLVE_TOKEN:{token_type:"TOKEN_NONE", resolve:"BIGINT:739462", part_key_func:"OB_PROXY_EXPR_TYPE_FUNC_TO_DAYS"}
        > CALC_PARTITION_ID:{part_description:"partition by range (P500145[BIGINT:739342], P500146[BIGINT:739464], P500147[BIGINT:739586])"}
      > PARTITION_ID_CALC_DONE:{partition_id:200105, level:1, partitions:"(p1)"}
      > PARTITION_ENTRY_LOOKUP_DONE:{leader:"127.0.0.1:2881"}
    > ROUTE_POLICY:{route_policy:"", chosen_route_type:"ROUTE_TYPE_LEADER", type:"FULL"}
    

Example 5: multi-table join with equality derivation

  1. Create tables:

    -- Partitioned table tsh1
    obclient[test]> create table if not exists tsh1 (c1 int,c2 varchar(10),c3 int) partition by hash(c1) partitions 4;
    
    -- Partitioned table tsh2
    obclient[test]> create table if not exists tsh2 (c1 int,c2 varchar(10),c3 int) partition by hash(c1) partitions 4;
    
    -- Partitioned table tsh3
    obclient[test]> create table if not exists tsh3 (c1 int,c2 varchar(10),c3 int) partition by hash(c1) partitions 4;
    
  2. EXPLAIN ROUTE:

    obclient[test]> explain route select a.c1 from tsh1 a ,tsh2 b where a.c1 = b.c1  and a.c2 in ('a','s','d','f','g','h')  and b.c2 = 'a' and b.c1 = 1\G
    

    Sample output:

    *************************** 1. row ***************************
    Route Plan:
    Trans Current Query:"explain route select a.c1 from tsh1 a ,tsh2 b where a.c1 = b.c1  and a.c2 in ('a','s','d','f','g','h')  and b.c2 = 'a' and b.c1 = 1"
    
    Route Prompts
    -----------------
    > ROUTE_INFO
      [INFO] Will do table partition location lookup to decide which OBServer to route to
    > ROUTE_POLICY
      [INFO] Will route to table's partition leader replica(127.0.0.1:2881) using route policy PRIMARY_ZONE_FIRST because query for STRONG read
    
    
    Route Plan
    -----------------
    > SQL_PARSE:{cmd:"OB_MYSQL_COM_QUERY", table:"tsh1"}
    > ROUTE_INFO:{route_info_type:"USE_PARTITION_LOCATION_LOOKUP"}
    > LOCATION_CACHE_LOOKUP:{mode:"oceanbase"}
      > TABLE_ENTRY_LOOKUP_START:{}
        > FETCH_TABLE_RELATED_DATA:{part_level:1, first part_expr:"c1"}
      > TABLE_ENTRY_LOOKUP_DONE:{table:"tsh1", table_id:"500148", table_type:"USER TABLE", partition_num:4}
      > PARTITION_ID_CALC_START:{}
        > EXPR_PARSE:{col_val:"c1=,c2=a,c2=a,c1=1"}
          > RESOLVE_TOKEN:{token_type:"TOKEN_STR_VAL", resolve:"VARCHAR:a<utf8mb4_general_ci>", token:"a"}
          > RESOLVE_TOKEN:{token_type:"TOKEN_STR_VAL", resolve:"VARCHAR:a<utf8mb4_general_ci>", token:"a"}
          > RESOLVE_TOKEN:{token_type:"TOKEN_INT_VAL", resolve:"BIGINT:1", token:"1"}
        > CALC_PARTITION_ID:{part_description:"partition by hash(INT<binary>) partitions 4"}
      > PARTITION_ID_CALC_DONE:{partition_id:200108, level:1, partitions:"(p1)"}
      > PARTITION_ENTRY_LOOKUP_DONE:{leader:"127.0.0.1:2881"}
    > ROUTE_POLICY:{route_policy:"", chosen_route_type:"ROUTE_TYPE_LEADER", type:"FULL"}
    

Previous topic

Weight-based load-balanced routing
Last

Next topic

Automatic routing to the primary/standby tenants
Next
on this page
Background
Limits
Usage
Examples