千家信息网

MySQL中怎么实现水平分区

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,MySQL中怎么实现水平分区,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。表结构如下:查询。SELECT * FROM
千家信息网最后更新 2026年11月01日MySQL中怎么实现水平分区

MySQL中怎么实现水平分区,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

表结构如下:

查询。

SELECT * FROM t1 WHERE system_type IN (1,2)
UNION ALL
SELECT * FROM t1 WHERE system_type = 3;

这条语句对system_type字段过滤了两次,然后进行了一次UNION ALL。 但是不知道,其实对两个分区一共进行了三次全表扫描。

我们改成这样:
SELECT * FROM t1 WHERE system_type IN (1,3)
UNION ALL
SELECT * FROM t1 WHERE system_type = 2;

看似简简单单的改变,我们把对两个分区的扫描从三次减少到了两次。 但是这样,开销也很大,能不能把UNION ALL去掉呢?当然可以。

SELECT * FROM t1 WHERE system_type >0 and system_type < 4;

去掉了UNION ALL,但是遇到的问题是对分区的扫描变成了范围查找,而且上下限不固定,相对来说,还有优化的空间。
www.2cto.com
我们改下对system_type列的过滤条件,变成如下:
SELECT * FROM t1 WHERE system_type in(1,2,3);

id select_type table partitions type possible_keys key key_len ref rows Extra
1 SIMPLE t1 r0,r1 ALL \N \N \N \N 17719 Using where

现在,依然是范围扫描,但是上下限就很明了了。这样对扫描分区来说,很快的找到上下限,比之前来的要快,开销来的要小点了。
但是貌似还可以优化, 虽然过滤条件的上下限明显了,但是对于区域之内的扫描还是全分区(相当于整个表的全表。)。
OK,那现在给这个列加上索引吧。


ALTER TABLE t1 ANALYZE PARTITION r0,r1;

SELECT * FROM t1 WHERE system_type in(1,2,3);

id select_type table partitions type possible_keys key key_len ref rows Extra
1 SIMPLE t1 r0,r1 range NewIndex1 NewIndex1 1 \N 6462 Using where


看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

上下 两个 开销 条件 范围 帮助 水平 很大 明显 清楚 简简 内容 区域 字段 对此 小点 很快 文章 新手 明了 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州紫鲸互联网科技有限公司 互联网科技公司的优势 互联网科技垄断 互联网科技卖菜 科技类互联网 小马过河互联网科技 菲比寻常互联网科技 湖南诚度互联网科技有限公司 南平创想时代互联网科技有限公司 玉溪互联网科技怎么选 翼展科技 首家互联网医院 长沙茂晟互联网科技有限公司 用友工业互联网科技发展 宇信科技在杭州互联网排第几 福建互联网展示科技馆设计 长沙渺峰互联网科技有限公司 美国五大互联网科技公司市值多少 山东蛋芒互联网科技有限公司 上海旺乐尼互联网科技有限公司 知域互联网科技有限公司官网 万易互联网科技有限公司 鑫亿盛互联网科技 智慧科技互联网 互联网科技公司有哪些 深圳市优智互联网科技有限公司 互联网数据科技专业 工业互联网展湾科技股份有限公司 怎样加入科技互联网 上海钢联属于互联网科技股吗 互联网科技新闻
0