데이터 베이스 MySQL 튜토리얼 MySQL不同存储引擎和不同分区字段对于查询的影响_MySQL

MySQL不同存储引擎和不同分区字段对于查询的影响_MySQL

Jun 01, 2016 pm 01:36 PM
영향

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
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

VBOX_E_OBJECT_NOT_FOUND(0x80bb0001)VirtualBox 오류 VBOX_E_OBJECT_NOT_FOUND(0x80bb0001)VirtualBox 오류 Mar 24, 2024 am 09:51 AM

VirtualBox에서 디스크 이미지를 열려고 하면 하드 드라이브를 등록할 수 없다는 오류가 발생할 수 있습니다. 이는 일반적으로 열려고 하는 VM 디스크 이미지 파일이 다른 가상 디스크 이미지 파일과 동일한 UUID를 가질 때 발생합니다. 이 경우 VirtualBox는 오류 코드 VBOX_E_OBJECT_NOT_FOUND(0x80bb0001)를 표시합니다. 이 오류가 발생하더라도 걱정하지 마세요. 시도해 볼 수 있는 몇 가지 해결 방법이 있습니다. 먼저 VirtualBox의 명령줄 도구를 사용하여 디스크 이미지 파일의 UUID를 변경하면 충돌을 피할 수 있습니다. 'VBoxManageinternal' 명령을 실행할 수 있습니다.

비행기 모드를 사용하여 전화를 받는 것이 얼마나 효과적인가요? 비행기 모드를 사용하여 전화를 받는 것이 얼마나 효과적인가요? Feb 20, 2024 am 10:07 AM

비행기 모드로 전화를 걸면 어떻게 될까요? 휴대폰은 사람들의 삶에 없어서는 안될 도구 중 하나가 되었습니다. 휴대폰은 의사소통 도구일 뿐만 아니라 오락, 학습, 업무 및 기타 기능의 집합체이기도 합니다. 휴대폰 기능의 지속적인 업그레이드와 개선으로 인해 사람들은 휴대폰에 대한 의존도가 점점 더 높아지고 있습니다. 비행기 모드의 등장으로 사람들은 비행 중에 휴대폰을 더욱 편리하게 사용할 수 있게 되었습니다. 하지만 비행기 모드에서 다른 사람의 통화가 휴대폰이나 사용자에게 어떤 영향을 미칠지 걱정하시는 분들도 계시죠? 이 글에서는 여러 측면에서 분석하고 논의할 것이다. 첫 번째

TikTok에서 댓글 기능을 끄는 방법은 무엇입니까? TikTok에서 댓글 기능을 끄면 어떻게 되나요? TikTok에서 댓글 기능을 끄는 방법은 무엇입니까? TikTok에서 댓글 기능을 끄면 어떻게 되나요? Mar 23, 2024 pm 06:20 PM

Douyin 플랫폼에서 사용자는 인생의 순간을 공유할 수 있을 뿐만 아니라 다른 사용자와 상호 작용할 수도 있습니다. 때로는 댓글 기능이 온라인 폭력, 악성 댓글 등 불쾌한 경험을 유발할 수 있습니다. 그렇다면 TikTok의 댓글 기능을 끄는 방법은 무엇입니까? 1. Douyin의 댓글 기능을 끄는 방법은 무엇입니까? 1. Douyin APP에 로그인하고 개인 홈페이지에 들어가세요. 2. 오른쪽 하단의 "I"를 클릭하여 설정 메뉴로 들어갑니다. 3. 설정 메뉴에서 "개인정보 설정"을 찾으세요. 4. "개인정보 설정"을 클릭하여 개인정보 설정 인터페이스로 들어갑니다. 5. 개인정보 설정 인터페이스에서 "댓글 설정"을 찾으세요. 6. "댓글 설정"을 클릭하여 댓글 설정 인터페이스로 들어갑니다. 7. 댓글 설정 인터페이스에서 '댓글 닫기' 옵션을 찾으세요. 8. "댓글 닫기" 옵션을 클릭하여 댓글 닫기를 확인하세요.

Java의 파일 포함 취약점과 그 영향 Java의 파일 포함 취약점과 그 영향 Aug 08, 2023 am 10:30 AM

Java는 다양한 애플리케이션을 개발하는 데 일반적으로 사용되는 프로그래밍 언어입니다. 그러나 다른 프로그래밍 언어와 마찬가지로 Java에도 보안 취약점과 위험이 있습니다. 일반적인 취약점 중 하나는 파일 포함 취약점(FileInclusionVulnerability)입니다. 이 문서에서는 이 취약점의 원리, 영향 및 방지 방법을 살펴봅니다. 파일 인클루젼 취약점은 프로그램 내에서 다른 파일을 동적으로 도입하거나 포함시키지만, 도입된 파일이 완전히 검증 및 보호되지 않는 취약점을 말합니다.

데이터 부족이 모델 학습에 미치는 영향 데이터 부족이 모델 학습에 미치는 영향 Oct 08, 2023 pm 06:17 PM

데이터 부족이 모델 학습에 미치는 영향에는 특정 코드 예제가 필요합니다. 기계 학습 및 인공 지능 분야에서 데이터는 모델 학습의 핵심 요소 중 하나입니다. 그러나 현실에서 우리가 자주 직면하는 문제는 데이터의 부족입니다. 데이터 희소성은 훈련 데이터의 양이 부족하거나 주석이 달린 데이터가 부족한 것을 의미합니다. 이 경우 모델 훈련에 일정한 영향을 미칩니다. 데이터 부족 문제는 주로 다음과 같은 측면에서 나타납니다. 과적합(Overfitting): 훈련 데이터의 양이 부족하면 모델이 과적합되기 쉽습니다. 과적합은 모델이 훈련 데이터에 과도하게 적응하는 것을 말합니다.

하드 드라이브의 불량 섹터로 인해 어떤 문제가 발생합니까? 하드 드라이브의 불량 섹터로 인해 어떤 문제가 발생합니까? Feb 18, 2024 am 10:07 AM

하드디스크의 배드섹터(Bad Sector)란 하드디스크의 물리적인 고장, 즉 하드디스크의 저장장치가 정상적으로 데이터를 읽거나 쓸 수 없는 상태를 의미합니다. 불량 섹터가 하드 드라이브에 미치는 영향은 매우 크며 데이터 손실, 시스템 충돌 및 하드 드라이브 성능 저하로 이어질 수 있습니다. 이 기사에서는 하드 드라이브 불량 섹터의 영향과 관련 솔루션을 자세히 소개합니다. 첫째, 하드 드라이브의 불량 섹터로 인해 데이터가 손실될 수 있습니다. 하드 디스크의 섹터에 불량 섹터가 있으면 해당 섹터의 데이터를 읽을 수 없어 파일이 손상되거나 액세스할 수 없게 됩니다. 불량 섹터가 위치한 섹터에 중요한 파일이 저장되어 있는 경우 이러한 상황은 특히 심각합니다.

섀시 누출이 컴퓨터에 어떤 영향을 미치나요? 섀시 누출이 컴퓨터에 어떤 영향을 미치나요? Feb 22, 2024 pm 06:48 PM

섀시 누출은 컴퓨터에 어떤 영향을 미칩니까? 지속적인 기술 발전으로 컴퓨터는 점차 사람들의 삶에서 없어서는 안될 도구가 되었습니다. 그러나 우리는 컴퓨터가 제공하는 편리함을 누리는 동시에 컴퓨터의 보안에도 주의를 기울여야 합니다. 케이스 유출은 제때에 처리하지 않을 경우 컴퓨터와 사용자에게 심각한 영향을 미칠 수 있는 잠재적인 문제입니다. 우선, 섀시 누출로 인해 컴퓨터 하드웨어가 손상될 수 있습니다. 컴퓨터의 마더보드, 전원 공급 장치, 내부 회로 및 기타 구성 요소는 모두 섀시 내부에 있습니다.

광산 카드가 게임에 구체적으로 어떤 영향을 미치나요? 광산 카드가 게임에 구체적으로 어떤 영향을 미치나요? Jan 03, 2024 am 09:05 AM

일부 사용자는 저렴함을 위해 마이닝 카드 구매를 고려할 수도 있습니다. 그러나 일부 게이머는 마이닝 카드가 게임 플레이에 미치는 영향을 걱정합니다. . 마이닝 카드를 사용하여 게임을 할 때의 효과는 무엇입니까? 1. 마이닝 카드의 수명이 매우 짧고 그냥 플레이한 후에는 쓸모가 없게 될 가능성이 높기 때문에 마이닝 카드를 사용한 게임 플레이의 안정성은 보장할 수 없습니다. 2. 마이닝 카드는 기본적으로 원본 버전의 거세 버전이므로 장기간 마모로 인해 모든 측면에서 성능이 약할 수 있습니다. 3. 이와 같은 방법으로 이용자는 게임 플레이 시 게임의 효과를 모두 표현하지 못할 수도 있습니다. 4. 게다가 그래픽 카드의 전자 부품은 미리 노후화되며, 게임을 하는 것도 그래픽 카드를 소모하기 때문에 소모되는 정도가 크기 때문에 게임에 미치는 영향이 큽니다. 5. 일반적으로 게임을 할 때는 마이닝 카드를 사용합니다.

See all articles