rang_key

【产品名称】oceanbase-cs

【产品版本】3.1

【问题描述】

表BMSQL_ITEM的主键是I_ID,并且还创建了索引idx_item_uk ON bmsql_item(i_name)。

EXPLAIN extended_noaddr

SELECT i_id, i_name, I_PRICE FROM BMSQL_ITEM WHERE i_name = ‘w2uw7BJj5tG5BTlSdfT’

\G

range_key([BMSQL_ITEM.I_NAME], [BMSQL_ITEM.shadow_pk_0]), range(w2uw7BJj5tG5BTlSdfT,MIN ; w2uw7BJj5tG5BTlSdfT,MAX),

问题:

这里为什么是range_key([BMSQL_ITEM.I_NAME], [BMSQL_ITEM.shadow_pk_0]),而不是range_key([BMSQL_ITEM.I_NAME], [BMSQL_ITEM.I_ID])呢?

shadow_pk_0是唯一索引里可以插入多个NULL而加上的,插入多个NULL时shadow_pk_0这一行的值不同,避免被判断为违反unique。