简单总结一下我遇到的问题,就是查询时索引不能正常工作,这只是数据库的差异。
我目前正在使用两个数据库。为了方便起见,我们将它们称为database1和database2。
还有会员表(TB_MBR_INFO)、聊天表(TB_CHAR_ROOM)等表。
TB_CHAT_ROOM 表包含卖家和买家会员 ID。
我想获取该会员ID的会员号。
所以我创建的查询如下。
SELECT
A.regdate AS REG_DT,
(select MBR_NO from database2.TB_MBR_INFO USE INDEX (TB_MBR_INFO_MBR_ID_IDX) where MBR_ID = A.seller) AS SELL_MBR_NO,
(select MBR_NO from database2.TB_MBR_INFO USE INDEX (TB_MBR_INFO_MBR_ID_IDX) where MBR_ID = A.buyer) AS PRCH_MBR_NO
FROM database1.TB_CHAT_ROOM A
但是,如果查看查询的执行计划,可能的_keys不存在,因此正在完全扫描成员表。
id|select_type |table |type |possible_keys|key |key_len|ref|rows |Extra |
--+------------------+-----------+-----+-------------+----------------------+-------+---+------+------------------------+
1|PRIMARY |A |ALL | | | | |474031| |
4|DEPENDENT SUBQUERY|TB_MBR_INFO|index| |TB_MBR_INFO_MBR_ID_IDX|62 | |422098|Using where; Using index|
3|DEPENDENT SUBQUERY|TB_MBR_INFO|index| |TB_MBR_INFO_MBR_ID_IDX|62 | |422098|Using where; Using index|
为了测试,我复制了聊天表并将其移至database2,索引应用正常。
SELECT
A.regdate AS REG_DT,
(select MBR_NO from database2.TB_MBR_INFO USE INDEX (TB_MBR_INFO_MBR_ID_IDX) where MBR_ID = A.seller) AS SELL_MBR_NO,
(select MBR_NO from database2.TB_MBR_INFO USE INDEX (TB_MBR_INFO_MBR_ID_IDX) where MBR_ID = A.buyer) AS PRCH_MBR_NO
FROM database2.TB_CHAT_ROOM A
id|select_type |table |type|possible_keys |key |key_len|ref |rows |Extra |
--+------------------+-----------+----+----------------------+----------------------+-------+---------------+-----+------------------------+
1|PRIMARY |A |ALL | | | | |62721| |
4|DEPENDENT SUBQUERY|TB_MBR_INFO|ref |TB_MBR_INFO_MBR_ID_IDX|TB_MBR_INFO_MBR_ID_IDX|62 |database2.A.buyer |1 |Using where; Using index|
3|DEPENDENT SUBQUERY|TB_MBR_INFO|ref |TB_MBR_INFO_MBR_ID_IDX|TB_MBR_INFO_MBR_ID_IDX|62 |database2.A.seller|1 |Using where; Using index|
两者之间唯一的区别是数据库。列和索引都是相同的。
为了以防万一,我将所有内容都移至数据库 1 并进行了测试,但索引不起作用的问题仍然存在。
我真的很想解决这个问题。如果您知道原因,请不要忽视。
请为涉及的每个数据库中的每个表提供
SHOW CREATE TABLE
。
我会冒险说数据类型或排序规则存在不一致。
SHOWs
将有助于发现它。