MySQL分区字段列是否需要再单独建索引
发表于:2024-11-15 作者:千家信息网编辑
千家信息网最后更新 2024年11月15日,下文主要给大家带来MySQL分区字段列是否需要再单独建索引,希望MySQL分区字段列是否需要再单独建索引能够带给大家实际用处,这也是我编辑这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。1、新
千家信息网最后更新 2024年11月15日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安全错误
数据库的锁怎样保障安全
放开那三国vm数据库
陕西电信服务器地址虚拟主机
服务器占用cpu高
软件开发几大类
华为网络安全博士
网络安全案例分析及解决
怎样检查服务器被黑过
数据库连接设置时区
游戏软件开发项目经理简历
计算机网络技术专业店
oracle数据库硬盘占用大
网络技术对培训课程改革的影响
前端和软件开发
云南农信服务器云空间
关于网络安全技术的背景
合肥对日软件开发招聘
哪里能找到跨境电商的数据库
如何解除网络安全的帐号保护
本机代理服务器ip
北京倚天润达网络技术有限公司
软件开发公司双方解除合同
服务器管理器仪表板怎么关闭
顺义区多功能网络技术质量推荐
研发支出在锐思哪个数据库
数据库未启动备份
数据库封锁简答题
数据库date查出来少一天
桌面软件开发前景
北京倚天润达网络技术有限公司
中金众联互联网科技