JOIN执行速度很慢,比MYSQL慢很多。是不是SQL语句不够优化??

如下是mysql5.7执行只用了0.18秒:
mysql5.7

SELECT
CONCAT(
t5.CODE,
LPAD(t4.buildingNum, 2, 0),
t3.unitNum,
t2.NUMBER_NAME,
‘01’
) AS sip,
t.MOBILE_NO AS phone,
t7.destinationIp AS auth
FROM
reg_user_info t
LEFT JOIN rh_user_house t1 ON t1.R_USER_ID = t.R_USER_ID
LEFT JOIN house_number t2 ON t2.NUMBER_ID = t1.NUMBER_ID
LEFT JOIN mate_unit_info t3 ON t3.UNIT_ID = t2.UNIT_ID
LEFT JOIN td_unit_channel c ON c.unitId = t3.UNIT_ID
LEFT JOIN building_info t4 ON t4.BUILDING_ID = t3.BUILDING_ID
LEFT JOIN cell_info t5 ON t5.CELL_ID = t4.CELL_ID
LEFT JOIN td_indoor t7 ON t2.number_id = t7.roomId
WHERE
c.channelId = ‘0351C45DA1B44FD1899F031E515E1583’
AND t1.call = 1;
±---------------±------------±-----+
| sip | phone | auth |
±---------------±------------±-----+
| 75517223070601 | 13513513500 | NULL |
±---------------±------------±-----+
1 row in set (0.18 sec)


相同的数据量在TIDB5.0.1环境配置了3个TIFLASH环境查询,居然要4.08秒!
tidb5.0.1

SELECT
CONCAT(
t5.CODE,
LPAD(t4.buildingNum, 2, 0),
t3.unitNum,
t2.NUMBER_NAME,
‘01’
) AS sip,
t.MOBILE_NO AS phone,
t7.destinationIp AS auth
FROM
reg_user_info t
LEFT JOIN rh_user_house t1 ON t1.R_USER_ID = t.R_USER_ID
LEFT JOIN house_number t2 ON t2.NUMBER_ID = t1.NUMBER_ID
LEFT JOIN mate_unit_info t3 ON t3.UNIT_ID = t2.UNIT_ID
LEFT JOIN td_unit_channel c ON c.unitId = t3.UNIT_ID
LEFT JOIN building_info t4 ON t4.BUILDING_ID = t3.BUILDING_ID
LEFT JOIN cell_info t5 ON t5.CELL_ID = t4.CELL_ID
LEFT JOIN td_indoor t7 ON t2.number_id = t7.roomId
WHERE
c.channelId = ‘0351C45DA1B44FD1899F031E515E1583’
AND t1.call = 1;
±---------------±------------±-----+
| sip | phone | auth |
±---------------±------------±-----+
| 75517223070601 | 13513513500 | NULL |
±---------------±------------±-----+
1 row in set (4.08 sec)

  1. 麻烦描述一下您这面的物理机器环境。
  2. 麻烦看一下sql 的执行计划

列存并不是所有时候都很快,尤其是如果行存索引可以很好过滤数据的前提下。假设通过行存+索引可以从1亿数据中选出10条,那种场景列存硬扫对比行存就显著慢很多。

如果没有特殊指定使用 tiflash,优化器会自动的进行选择 tikv 或者 tiflash。
麻烦提供一下 执行计划。
麻烦您这面贴一下执行的结果

快是有前提条件的,Tidb不能包打所有场景下的问题。

如果遇到非预期问题,可以创建新的帖子,我们一起研究一下哈。