OceanBase 4.2.1分区表已建索引仍查询极慢的原因咨询
OceanBase分区表查询性能异常问题
OceanBase版本
社区版4.2.1(MySQL模式)
在查询分区表时,OceanBase的性能比MySQL 5.7低10倍,即便已创建合适的索引。以下是可复现的最小示例:
表结构
CREATE TABLE partitioned_orders ( order_id BIGINT PRIMARY KEY, user_id BIGINT NOT NULL, amount DECIMAL(20,2), create_time DATETIME NOT NULL, INDEX idx_user (user_id), INDEX idx_time (create_time) ) PARTITION BY RANGE(TO_DAYS(create_time)) ( PARTITION p202301 VALUES LESS THAN (TO_DAYS('2023-02-01')), PARTITION p202302 VALUES LESS THAN (TO_DAYS('2023-03-01')), -- ...共12个分区 );
问题查询
-- 该查询在OceanBase中耗时4.8秒,MySQL中仅需0.3秒 EXPLAIN ANALYZE SELECT * FROM partitioned_orders WHERE user_id = 10085 AND create_time BETWEEN '2023-01-15' AND '2023-02-20';
执行计划(简化版)
| ID | OPERATOR | EST. ROWS | COST | TIME |
|---|---|---|---|---|
| 0 | TABLE SCAN | 200 | 25300 | 4834ms |
| partition: ALL |
经测试,移除user_id条件后,查询仅扫描p202301、p202302分区,耗时0.2秒,且GV$OB_SQL_AUDIT中无锁或资源等待记录。
疑问
为何分区表已创建索引,查询速度仍极慢?
内容的提问来源于stack exchange,提问作者user30403414
相关产品推荐
相关产品推荐

