想咨询下,下面这个测试,为啥不选择走primary
obclient(root@obmysql)[db1]> CREATE TABLE t1 (
→ c1 varchar(20) NOT NULL ,
→ c2 datetime(3) NOT NULL,
→ c3 int(11) NOT NULL ,
→ PRIMARY KEY (c1, c2, c3),
→ KEY IDX1 (C2, C3)
→ );
Query OK, 0 rows affected (0.046 sec)
obclient(root@obmysql)[db1]> desc select * from t1 where 1=1 and c1 in (‘1.a’, ‘2.b’, ‘3.c’)
→ and c2 between ‘2025-07-31 00:00:00.000’ and ‘2025-07-31 23:00:00.000’ order by c2, c3 limit 0, 10;
±-----------------------------------------------------------------------------------------------------------------------------------------------------+
| Query Plan |
±-----------------------------------------------------------------------------------------------------------------------------------------------------+
| ==================================================== |
| |ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| |
| ---------------------------------------------------- |
| |0 |TABLE RANGE SCAN|t1(IDX1)|1 |4 | |
| ==================================================== |
Outputs & filters: |
---|
0 - output([t1.c1], [t1.c2], [t1.c3]), filter([t1.c1 IN (‘1.a’, ‘2.b’, ‘3.c’)]), rowset=16 |
access([t1.c1], [t1.c2], [t1.c3]), partitions(p0) |
limit(10), offset(0), is_index_back=false, is_global_index=false, filter_before_indexback[false], |
range_key([t1.c2], [t1.c3], [t1.c1]), range(2025-07-31 00:00:00.000000,MIN,MIN ; 2025-07-31 23:00:00.000000,MAX,MAX), |
range_cond([t1.c2 >= INTERNAL_FUNCTION(‘2025-07-31 00:00:00.000’, 114, 17)], [t1.c2 <= INTERNAL_FUNCTION(‘2025-07-31 23:00:00.000’, 112, 17)]) |
±-----------------------------------------------------------------------------------------------------------------------------------------------------+
12 rows in set (0.015 sec)
obclient(root@obmysql)[db1]>