TIDB单表数据超20亿,如果优化查询性能?

生产环境,TIDB单表数据量超20亿,在走索引的情况下,单表的查询筛选会很慢,怎么优化查询速度。各位大佬有好的方案吗?
sql语句:
SELECT
count(0)
FROM
collect_pole_history_message a
WHERE
1 = 1
AND SITE_CODE IN (
‘XN11000121’,
‘HN11000211’,
‘HN11000413’,
‘HN11000411’,
‘HN11000313’,
‘HN11000111’,
‘HN11000113’,
‘HN11000112’,
‘HN11000213’,
‘HN11000311’
)
AND command_code IN (
‘0x3A’,
‘0x7A’,
‘0x68’,
‘0x10’,
‘0x70’,
‘0x05’,
‘0x6C’,
‘0x69’,
‘0x11’,
‘0x15’,
‘0x3A’,
‘0x05’,
‘0x17’,
‘0x15’,
‘0x70’,
‘0x3F’,
‘0x6F’,
‘0x7F’,
‘0x11’
)
AND org_id IN (
‘61386612e4b0a48664adbc60’,
‘61386cece4b0a48664adbc8b’,
‘61386e00e4b0a48664adbc9b’,
‘61386ea7e4b0a48664adbc9d’,
‘63876c92e4b00dbb07d4dc41’,
‘638d4b8fe4b00dbb07d4dcd3’,
‘61415640e4b0d3a914d45efb’,
‘61396d53e4b064a86f4a16ff’,
‘61396d7de4b064a86f4a1702’,
‘6323d716e4b00e22a4b93cf6’,
‘613acabae4b0f8f969dab71f’,
‘613acb35e4b0f8f969dab723’
)
AND occur_time >= ‘2023-04-22 08:48:51’
AND occur_time <= ‘2023-04-23 08:48:51’;
表结构:


执行计划:

集群拓扑:

拓扑信息、sql 、 执行计划啥的 贴上来看看

没有具体的SQL执行谈优化,容易泛泛而谈。

请给出具体的SQL和表结构信息,尤其是索引信息。如果有隐私需求可以先对表字段适当脱敏

贴个执行计划吧

怼上它200个节点,看看还慢不慢

如上如果超过20亿的数据的表,是否适合用分区表,或者拆分成多张表呢?

应该也不用拆表或分区表,我们这边有个40多亿行的表,60多个字段,索引设计和使用得当,我们每天各种查询都挺快的。

还是要具体看看他这边的SQL和执行计划,再针对性调优就行

大佬,我已经在上面补充了,你看下,多谢。

我已经在上面补充了,你看下,多谢。

我已经在上面补充了信息,你看下,多谢。

可以考虑下分区表,按照时间字段分区,减少数据量

tiDB不需要分区,分不分表看情况。
MYSQL做分去分表是单机版数据库,实现集群优化的一种方式,降低单台数据库服务器的计算和存储需求;而tiDB本身是分布式数据库,可以自动实现均衡。

你这有几个索引重复了,可以把index_no,index_code两个索引删除掉。
优化的话,过滤性高的话,可以把这四个字段做成一个联合索引。或者加个tiflash

这种大表聚合类的我感觉用tiflash是不是更合适点?

建议你参考一下这个文档。你这种数据量的优化,只能靠迭代。
从你语句来看,我建议你是建仓或分表,你这个表列多,行多,不拆分的话,除非你上小型机,否则优化不起来。

https://www.toutiao.com/article/7221447689358279224/?app=news_article&timestamp=1681469611&use_new_style=1&req_id=202304141853307E0224195AF583148E7B&group_id=7221447689358279224&wxshare_count=1&tt_from=weixin&utm_source=weixin&utm_medium=toutiao_android&utm_campaign=client_share&share_token=8e161d08-ff04-4186-952d-5d6ce024076d&source=m_redirect&wid=1682216109154

tiflash需要几个节点才可以?查询性能可以提升多少呢?

分区表试过性能提升很少,并且一旦查询条件不是分区字段那么性能还不如不分区的性能好呢。

对于分区表查询,最佳实践是where条件里必须要带上分区列来过滤,否则会触发全分区扫描,指定分区查询后系效率一般都会很不错

太猛了,我试过单表5亿的,用了一台tiflash 查询性能还算OK,你这20亿,太厉害了

我这好几个 20亿的大表数据。 优化就是看怎么使用,哪里有问题处理哪里。
最差的可以更改业务逻辑。