MySQL不同存储引擎和不同分区字段对于查询的影响_MySQL
bitsCN.com
MySQL不同存储引擎和不同分区字段对于查询的影响
前提:每种表类型准备了200万条相同的数据。
表一 InnoDB & PARTITION BY RANGE (id)
Sql代码
CREATE TABLE `customer_innodb_id` (
`id` int(11) NOT NULL,
`email` varchar(64) NOT NULL,
`name` varchar(32) NOT NULL,
`password` varchar(32) NOT NULL,
`phone` varchar(13) DEFAULT NULL,
`birth` date DEFAULT NULL,
`sex` int(1) DEFAULT NULL,
`avatar` blob,
`address` varchar(64) DEFAULT NULL,
`regtime` datetime DEFAULT NULL,
`lastip` varchar(15) DEFAULT NULL,
`modifytime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (id)
(PARTITION p0 VALUES LESS THAN (100000) ENGINE = InnoDB,
PARTITION p1 VALUES LESS THAN (500000) ENGINE = InnoDB,
PARTITION p2 VALUES LESS THAN (1000000) ENGINE = InnoDB,
PARTITION p3 VALUES LESS THAN (1500000) ENGINE = InnoDB,
PARTITION p4 VALUES LESS THAN (2000000) ENGINE = InnoDB,
PARTITION p5 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */;
查询结果:
Sql代码
mysql> select count(*) from customer_innodb_id where id > 50000 and id
+----------+
| count(*) |
+----------+
| 449999 |
+----------+
1 row in set (1.19 sec)
mysql> select count(*) from customer_innodb_id where id > 50000 and id
+----------+
| count(*) |
+----------+
| 449999 |
+----------+
1 row in set (0.28 sec)
mysql> select count(*) from customer_innodb_id where regtime > '1995-01-01 00:00
:00' and regtime
+----------+
| count(*) |
+----------+
| 199349 |
+----------+
1 row in set (4.74 sec)
mysql> select count(*) from customer_innodb_id where regtime > '1995-01-01 00:00
:00' and regtime
+----------+
| count(*) |
+----------+
| 199349 |
+----------+
1 row in set (5.28 sec)
表二 InnoDB & PARTITION BY RANGE (year)
Sql代码
CREATE TABLE `customer_innodb_year` (
`id` int(11) NOT NULL,
`email` varchar(64) NOT NULL,
`name` varchar(32) NOT NULL,
`password` varchar(32) NOT NULL,
`phone` varchar(13) DEFAULT NULL,
`birth` date DEFAULT NULL,
`sex` int(1) DEFAULT NULL,
`avatar` blob,
`address` varchar(64) DEFAULT NULL,
`regtime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`lastip` varchar(15) DEFAULT NULL,
`modifytime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`,`regtime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (YEAR(regtime ))
(PARTITION p0 VALUES LESS THAN (1996) ENGINE = InnoDB,
PARTITION p1 VALUES LESS THAN (1997) ENGINE = InnoDB,
PARTITION p2 VALUES LESS THAN (1998) ENGINE = InnoDB,
PARTITION p3 VALUES LESS THAN (1999) ENGINE = InnoDB,
PARTITION p4 VALUES LESS THAN (2000) ENGINE = InnoDB,
PARTITION p5 VALUES LESS THAN (2001) ENGINE = InnoDB,
PARTITION p6 VALUES LESS THAN (2002) ENGINE = InnoDB,
PARTITION p7 VALUES LESS THAN (2003) ENGINE = InnoDB,
PARTITION p8 VALUES LESS THAN (2004) ENGINE = InnoDB,
PARTITION p9 VALUES LESS THAN (2005) ENGINE = InnoDB,
PARTITION p10 VALUES LESS THAN (2006) ENGINE = InnoDB,
PARTITION p11 VALUES LESS THAN (2007) ENGINE = InnoDB,
PARTITION p12 VALUES LESS THAN (2008) ENGINE = InnoDB,
PARTITION p13 VALUES LESS THAN (2009) ENGINE = InnoDB,
PARTITION p14 VALUES LESS THAN (2010) ENGINE = InnoDB,
PARTITION p15 VALUES LESS THAN (2011) ENGINE = InnoDB,
PARTITION p16 VALUES LESS THAN (2012) ENGINE = InnoDB,
PARTITION p17 VALUES LESS THAN (2013) ENGINE = InnoDB,
PARTITION p18 VALUES LESS THAN (2014) ENGINE = InnoDB,
PARTITION p19 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */;
查询结果:
Sql代码
mysql> select count(*) from customer_innodb_year where id > 50000 and id
0;
+----------+
| count(*) |
+----------+
| 449999 |
+----------+
1 row in set (5.31 sec)
mysql> select count(*) from customer_innodb_year where id > 50000 and id
0;
+----------+
| count(*) |
+----------+
| 449999 |
+----------+
1 row in set (0.31 sec)
mysql> select count(*) from customer_innodb_year where regtime > '1995-01-01 00:
00:00' and regtime
+----------+
| count(*) |
+----------+
| 199349 |
+----------+
1 row in set (0.47 sec)
mysql> select count(*) from customer_innodb_year where regtime > '1995-01-01 00:
00:00' and regtime
+----------+
| count(*) |
+----------+
| 199349 |
+----------+
1 row in set (0.19 sec)
表三 MyISAM & PARTITION BY RANGE (id)
Sql代码
CREATE TABLE `customer_myisam_id` (
`id` int(11) NOT NULL,
`email` varchar(64) NOT NULL,
`name` varchar(32) NOT NULL,
`password` varchar(32) NOT NULL,
`phone` varchar(13) DEFAULT NULL,
`birth` date DEFAULT NULL,
`sex` int(1) DEFAULT NULL,
`avatar` blob,
`address` varchar(64) DEFAULT NULL,
`regtime` datetime DEFAULT NULL,
`lastip` varchar(15) DEFAULT NULL,
`modifytime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (id)
(PARTITION p0 VALUES LESS THAN (100000) ENGINE = MyISAM,
PARTITION p1 VALUES LESS THAN (500000) ENGINE = MyISAM,
PARTITION p2 VALUES LESS THAN (1000000) ENGINE = MyISAM,
PARTITION p3 VALUES LESS THAN (1500000) ENGINE = MyISAM,
PARTITION p4 VALUES LESS THAN (2000000) ENGINE = MyISAM,
PARTITION p5 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */;
查询结果:
Sql代码
mysql> select count(*) from customer_myisam_id where id > 50000 and id
+----------+
| count(*) |
+----------+
| 449999 |
+----------+
1 row in set (0.59 sec)
mysql> select count(*) from customer_myisam_id where id > 50000 and id
+----------+
| count(*) |
+----------+
| 449999 |
+----------+
1 row in set (0.16 sec)
mysql> select count(*) from customer_myisam_id where regtime > '1995-01-01 00:00
:00' and regtime
+----------+
| count(*) |
+----------+
| 199349 |
+----------+
1 row in set (34.17 sec)
mysql> select count(*) from customer_myisam_id where regtime > '1995-01-01 00:00
:00' and regtime
+----------+
| count(*) |
+----------+
| 199349 |
+----------+
1 row in set (34.06 sec)
表四 MyISAM & PARTITION BY RANGE (year)
Sql代码
CREATE TABLE `customer_myisam_year` (
`id` int(11) NOT NULL,
`email` varchar(64) NOT NULL,
`name` varchar(32) NOT NULL,
`password` varchar(32) NOT NULL,
`phone` varchar(13) DEFAULT NULL,
`birth` date DEFAULT NULL,
`sex` int(1) DEFAULT NULL,
`avatar` blob,
`address` varchar(64) DEFAULT NULL,
`regtime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`lastip` varchar(15) DEFAULT NULL,
`modifytime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`,`regtime`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (YEAR(regtime ))
(PARTITION p0 VALUES LESS THAN (1996) ENGINE = MyISAM,
PARTITION p1 VALUES LESS THAN (1997) ENGINE = MyISAM,
PARTITION p2 VALUES LESS THAN (1998) ENGINE = MyISAM,
PARTITION p3 VALUES LESS THAN (1999) ENGINE = MyISAM,
PARTITION p4 VALUES LESS THAN (2000) ENGINE = MyISAM,
PARTITION p5 VALUES LESS THAN (2001) ENGINE = MyISAM,
PARTITION p6 VALUES LESS THAN (2002) ENGINE = MyISAM,
PARTITION p7 VALUES LESS THAN (2003) ENGINE = MyISAM,
PARTITION p8 VALUES LESS THAN (2004) ENGINE = MyISAM,
PARTITION p9 VALUES LESS THAN (2005) ENGINE = MyISAM,
PARTITION p10 VALUES LESS THAN (2006) ENGINE = MyISAM,
PARTITION p11 VALUES LESS THAN (2007) ENGINE = MyISAM,
PARTITION p12 VALUES LESS THAN (2008) ENGINE = MyISAM,
PARTITION p13 VALUES LESS THAN (2009) ENGINE = MyISAM,
PARTITION p14 VALUES LESS THAN (2010) ENGINE = MyISAM,
PARTITION p15 VALUES LESS THAN (2011) ENGINE = MyISAM,
PARTITION p16 VALUES LESS THAN (2012) ENGINE = MyISAM,
PARTITION p17 VALUES LESS THAN (2013) ENGINE = MyISAM,
PARTITION p18 VALUES LESS THAN (2014) ENGINE = MyISAM,
PARTITION p19 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */;
查询结果:
Sql代码
mysql> select count(*) from customer_myisam_year where id > 50000 and id
0;
+----------+
| count(*) |
+----------+
| 449999 |
+----------+
1 row in set (2.08 sec)
mysql> select count(*) from customer_myisam_year where id > 50000 and id
0;
+----------+
| count(*) |
+----------+
| 449999 |
+----------+
1 row in set (0.17 sec)
mysql> select count(*) from customer_myisam_year where regtime > '1995-01-01 00:
00:00' and regtime
+----------+
| count(*) |
+----------+
| 199349 |
+----------+
1 row in set (0.56 sec)
mysql> select count(*) from customer_myisam_year where regtime > '1995-01-01 00:
00:00' and regtime
+----------+
| count(*) |
+----------+
| 199349 |
+----------+
1 row in set (0.13 sec)
结果汇总
序号 存储引擎 分区函数 查询条件 一次查询(sec) 二次查询(sec)
1 InnoDB id id 1.19 0.28
2 InnoDB id regtime 4.74 5.28
3 InnoDB year id 5.31 0.31
4 InnoDB year regtime 0.47 0.19
5 MyISAM id id 0.59 0.16
6 MyISAM id regtime 34.17 34.06
7 MyISAM year id 2.08 0.17
8 MyISAM year regtime 0.56 0.13
总结
1、对于按照时间区间来查询的,建议采用按照时间来分区,减少查询范围。
2、MyISAM性能总体占优,但是不支持事务处理、外键约束等。
bitsCN.com

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

在VirtualBox中尝试打开磁盘映像时,可能会遇到错误提示,指示硬盘无法注册。这种情况通常发生在您尝试打开的VM磁盘映像文件与另一个虚拟磁盘映像文件具有相同的UUID时。在这种情况下,VirtualBox会显示错误代码VBOX_E_OBJECT_NOT_FOUND(0x80bb0001)。如果您遇到这个错误,不必担心,有一些解决方法可以尝试。首先,您可以尝试使用VirtualBox的命令行工具来更改磁盘映像文件的UUID,这样可以避免冲突。您可以运行命令`VBoxManageinternal

飞行模式别人打电话会怎么样手机已经成为人们生活中必不可少的工具之一,它不仅仅是通信工具,还是娱乐、学习、工作等多种功能的集合体。随着手机功能的不断升级和改进,人们对于手机的依赖性也越来越高。在飞行模式出现后,人们可以更方便地在飞行中使用手机。但是,有人担心在飞行模式下别人打电话的情况会对手机或者使用者产生什么样的影响呢?本文将从几个方面来进行分析和讨论。首先

在抖音平台上,用户不仅可以分享自己的生活点滴,还可以与其他用户互动交流。有时候评论功能可能会引发一些不愉快的经历,如网络暴力、恶意评论等。那么,如何关闭抖音评论功能呢?一、如何关闭抖音评论功能?1.登录抖音APP,进入个人主页。2.点击右下角的“我”,进入设置菜单。3.在设置菜单中,找到“隐私设置”。4.点击“隐私设置”,进入隐私设置界面。5.在隐私设置界面,找到“评论设置”。6.点击“评论设置”,进入评论设置界面。7.在评论设置界面,找到“关闭评论”选项。8.点击“关闭评论”选项,确认关闭评论

Java是一种常用的编程语言,用于开发各种应用程序。然而,就像其他编程语言一样,Java也存在安全漏洞和风险。其中一个常见的漏洞是文件包含漏洞(FileInclusionVulnerability),本文将探讨文件包含漏洞的原理、影响以及如何防范这种漏洞。文件包含漏洞是指在程序中通过动态引入或包含其他文件的方式,但却没有对引入的文件做充分的验证和防护,从

数据稀缺对模型训练的影响问题,需要具体代码示例在机器学习和人工智能领域,数据是训练模型的核心要素之一。然而,现实中我们经常面临的一个问题是数据稀缺。数据稀缺指的是训练数据的量不足或标注数据的缺乏,这种情况下会对模型训练产生一定的影响。数据稀缺的问题主要体现在以下几个方面:过拟合:当训练数据量不够时,模型很容易出现过拟合的现象。过拟合是指模型过度适应训练数据,

硬盘坏道是指硬盘的物理故障,即硬盘上的储存单元无法正常读取或写入数据。坏道对硬盘的影响是非常显着的,它可能导致数据丢失、系统崩溃和硬盘性能下降等问题。本文将会详细介绍硬盘坏道的影响及相关解决方法。首先,硬盘坏道可能导致数据丢失。当硬盘中的某个扇区出现坏道时,该扇区上的数据将无法读取,从而导致文件损坏或无法访问。这种情况尤其严重,如果坏道所在的扇区中存储了重要

为了图便宜可能有些用户会考虑入手矿卡,这些卡毕竟是顶级的显卡,但是也有部分游戏玩家很担心矿卡打游戏有什么影响,下面就看看具体的介绍吧。矿卡打游戏有什么影响:1、矿卡打游戏没法保证稳定性,因为矿卡的寿命很短很可能玩玩就废了。2、矿卡基本上等于原版的阉割版,由于长期的损耗,各方面性能可能都弱了。3、这样用户在玩游戏的时候可能就不能将游戏的效果全部展示了。4、而且显卡的电子元件都会提前的老化,更何况打游戏也很消耗显卡,因此等于更大程度上的来将其榨干,因此对游戏的影响是很大的。5、总的来说,使用矿卡打游

一个电脑的运行好坏基本上都和他的显卡有着非常大的影响,一部分用户对于显卡不是很了解,也不清楚显卡到底对电脑的哪些方面会有影响,为了方便大家观看,这里就给大家介绍一下显卡配置低的一些影响。显卡配置低的影响什么答:1、一些大型的3D类型的游戏无法运行。2、播放一些高清视频的时候电脑会有很大的压力。3、对于一些比较专业的软件,需要进行绘图和3D模型渲染时没有办法很好运行。4、显卡的配置低,那就会导致游戏打不开,或者频繁地闪退卡顿和卡死,电脑也会花屏,蓝屏。5、游戏里面最重要的就是显卡了,因为很多画面需
