mysql的分区表和索引对查询性能优化有何区别

mysql的分区表和索引对查询性能优化有何区别,第1张

谈点我的看法

分区表:可以想象为磁盘的多个分区一样,可以减少全盘扫描的可能。直接定位到某个分区表

类似要在电脑上找文件,直接到c盘,防止在D E F盘扫描一样,从而减少io压力,提升性能。在查询上分区表表现还不是十分突出,但是删除,作数据迁移的时候就很明显了。

索引索引在查询上可以快速定位符合要求的纪录,查询通过索引,也可以防止全表扫描,类似直接定位excel里面的行号一样。但是索引维护对insert update影响必须要考虑到

简单点理解2者区别,从数据库角度来看,分区表更侧向于片状范围划定,索引更趋向于线性定位

判断MySQL是不是支持分区

怎样通过show命令来判断你当前的MySQL数据库是否支持数据库分区功能。在显示任何有关分区支持信息的命令show engines的输出中,不会给出任何信息;必须使用show variables命令来做出这个判断。如下:

1

2

3

4

5

6

7

mysql> show variables like '%partition%';

+-----------------------+-------+

| Variable_name | Value |

+-----------------------+-------+

| have_partition_engine | YES |

+-----------------------+-------+

1 row in set (000 sec)

如果没有看到变量have_partition_engine的值为YES,那么MySQL的版本就不支持分区。

(注意:在显示任何有关分区支持信息的命令show engines的输出中,不会给出任何信息;必须使用show variables命令来做出这个判断)

我的MySQL:

版本:Server version 5151

mysql> show variables like '%partition%';

+-------------------+-------+

| Variable_name | Value |

+-------------------+-------+

| have_partitioning | YES |

+-------------------+-------+

1 row in set (000 sec)

create table sale(

sale_id int not null,

sale_date datetime,

money int

)engine=myisam;

alter table sale partition by range columns (sale_date) (

partition p01 values less than ('2011-1-1'),

partition p02 values less than ('2012-1-1')

);

mysql数据库KEY分区用法

按照KEY进行分区类似于按照HASH分区,除了HASH分区使用的用户定义的表达式,而KEY分区的

哈希函数是由MySQL

服务器提供。MySQL

簇(Cluster)使用函数MD5()来实现KEY分区;对于使用其他存储引擎的表,服务器使用其自己内部的

哈希函数,这些函数是基于与PASSWORD()一样的运算法则。

“CREATE

TABLE

PARTITION

BY

KEY”的语法规则类似于创建一个通过HASH分区的表的规则。它们唯一的区别在于使用的关键字是KEY而不是HASH,并且KEY分区只采用一个或多个列名的一个列表。

通过线性KEY分割一个表也是可能的。下面是一个简单的例子:

CREATE

TABLE

tk

(

col1

INT

NOT

NULL,

col2

CHAR(5),

col3

DATE

)

PARTITION

BY

LINEAR

KEY

(col1)

PARTITIONS

3;

在KEY分区中使用关键字LINEAR和在HASH分区中使用具有同样的作用,分区的编号是通过2的幂(powers-of-two)算法得到,而不是通过模数算法。

如果一张表的数据量太大的话,那么myd,myi就会变的很大,查找数据就会变的很慢,这个时候我们可以利用mysql的分区功能,在物理上将这一张表对应的三个文件,分割成许多个小块,这样呢,我们查找一条数据时,就不用全部查找了,只要知道这条数据在哪一块,然后在那一块找就行了。如果表的数据太大,可能一个磁盘放不下,这个时候,我们可以把数据分配到不同的磁盘里面去。

以上就是关于mysql的分区表和索引对查询性能优化有何区别全部的内容,包括:mysql的分区表和索引对查询性能优化有何区别、判断MySQL是不是支持分区、为什么mysql5.5查看表分区的某个区块上的数据时,语法报错等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9802699.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存