MySQL分区字段列是否需要再单独建索引
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,下文主要给大家带来MySQL分区字段列是否需要再单独建索引,希望MySQL分区字段列是否需要再单独建索引能够带给大家实际用处,这也是我编辑这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。1、新
千家信息网最后更新 2025年01月23日MySQL分区字段列是否需要再单独建索引
下文主要给大家带来MySQL分区字段列是否需要再单独建索引,希望MySQL分区字段列是否需要再单独建索引能够带给大家实际用处,这也是我编辑这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。
1、新建表effect_new(以创建时间按月分区)
CREATE TABLE `effect_new` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `type` tinyint(4) NOT NULL DEFAULT '0', `timezone` varchar(10) DEFAULT NULL, `date` varchar(10) NOT NULL, `hour` varchar(2) DEFAULT NULL, `position` varchar(200) DEFAULT NULL, `country` varchar(32) NOT NULL, `create_time` datetime NOT NULL DEFAULT '1970-01-01 00:00:00', PRIMARY KEY (`id`,`create_time`), KEY `index_date_hour_coun` (`date`,`hour`,`country`)) ENGINE=InnoDB AUTO_INCREMENT=983041 DEFAULT CHARSET=utf8PARTITION BY RANGE (TO_DAYS (`create_time`))(PARTITION p0 VALUES LESS THAN (736754) ENGINE = InnoDB, PARTITION p1 VALUES LESS THAN (736785) ENGINE = InnoDB, PARTITION p2 VALUES LESS THAN (736815) ENGINE = InnoDB, PARTITION p3 VALUES LESS THAN (736846) ENGINE = InnoDB, PARTITION p4 VALUES LESS THAN (736876) ENGINE = InnoDB, PARTITION p5 VALUES LESS THAN (736907) ENGINE = InnoDB, PARTITION p6 VALUES LESS THAN (736938) ENGINE = InnoDB, PARTITION p7 VALUES LESS THAN (736968) ENGINE = InnoDB, PARTITION p8 VALUES LESS THAN (736999) ENGINE = InnoDB, PARTITION p9 VALUES LESS THAN (737029) ENGINE = InnoDB, PARTITION p10 VALUES LESS THAN (737060) ENGINE = InnoDB);
2、插入部分数据数据
INSERT INTO `effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('1', '0', 'GMT+8', '2017-07-01', '', 'M-NotiCleanFull-FamilyRecom-0026', '', '2017-07-02 00:07:02');INSERT INTO `effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('2', '1', 'GMT+8', '2017-09-30', '23', 'Ma5dtJub', 'EG', '2017-10-01 00:00:00');INSERT INTO `effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('3', '1', 'GMT+8', '2017-09-10', '10', '28', 'DZ', '2017-09-11 00:08:20');INSERT INTO `effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('4', '1', 'GMT+8', '2017-02-03', '20', '32', 'AD', '2017-02-04 00:00:00');INSERT INTO `effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('5', '0', 'GMT+8', '2017-03-05', '2', NULL, 'AI', '2017-03-06 02:10:00');INSERT INTO `effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('6', '0', 'GMT+8', '2017-09-23', '13', 'M-BrandSplash-S-0038', 'AG', '2017-09-23 13:00:00');INSERT INTO `effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('7', '1', NULL, '2017-10-13', '12', 'BB-Main-AppAd-0018', 'AF', '2017-10-14 12:00:00');INSERT INTO `effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('8', '0', 'GMT+8', '2017-10-28', '2', 'M-ChargeReminder-S-0040', 'AE', '2017-10-29 00:00:00');INSERT INTO `effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('9', '1', 'GMT+8', '2017-10-09', NULL, '30', 'AI', '2017-10-10 00:09:00');INSERT INTO `effect_new` (`id`, `type`, `timezone`, `date`, `hour`, `position`, `country`, `create_time`) VALUES ('10', '0', 'GMT+8', '2017-10-05', '5', ' M-BrandSplash', 'LA', '2017-10-06 05:10:00');
3、分析语句
EXPLAIN PARTITIONSselect * from effect_new_indexwhere create_time = '2017-10-14 12:00:00'
结果为:
id | select_type | table | partitions | tpye | possible_keys | key | key_len | ref | rows | filtered | extra |
1 | SIMPLE | effect_new | p8 | ALL | null | null | null | null | 391515 | 10 | Using where |
4、给表effect_new添加索引idx_ctime
5、分析添加索引后的执行计划
结果为:
id | select_type | table | partitions | tpye | possible_keys | key | key_len | ref | rows | filtered | extra |
1 | SIMPLE | effect_new | p8 | ref | idx_ctime | idx_ctime | 5 | const | 60760 | 100 | null |
6、结论:
虽然表已经根据此字段分区,但这不能等同于索引。分了区,只能说该字段为某个值的记录会在某个分区里面,但不是索引,还要一顿好找。
有时候,主键不等于分区依据列,这时候主键又想建聚集索引的话,那么必须包含分区依据列,搞成复合主键。那么,这种情况下,分区依据列不就有索引了吗?是的,可是它不够快,如果在这个复合索引里面,分区依据列不排在第一位,就不够快,如果查找语句里常常用分区依据列作为过滤条件,就有必要为分区依据列额外单独建立一个索引。
对于以上关于MySQL分区字段列是否需要再单独建索引,大家是不是觉得非常有帮助。如果需要了解更多内容,请继续关注我们的行业资讯,相信你会喜欢上这些内容的。
索引
字段
下文
不够
内容
数据
结果
语句
分析
好找
必要
这不
实际
废话
情况
时间
是的
更多
有时候
条件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发利润多大
互联网 兼app软件开发
网络安全工程专业薪资待遇
战地1刷任务的服务器
服务器存储挂载
软件开发前台中台后台
mvc框架中如何操作数据库
服务器安装管理
贵州6家庭教育与网络安全视频
er图主要用于数据库
网络数据库技术是干什么的
u9软件开发平台
网络安全gns
华美云我的世界神印王座服务器
arcgis数据库连接表
高中毕业能干软件开发吗
安庆服务器机箱定做
数据库创建表语句auto
计算机维护及软件开发
软件开发大公司怎么进
mbd软件开发是什么
jsp页面加载数据库连接
网络安全班会课稿子
南京白鸥网络技术
网络技术与管理心得
电脑没服务器
开黑啦服务器等级
象山计算机软件开发系统
阅读国家网络安全法心得
南京单片机软件开发