gpt4 book ai didi

mysql - 按数据mysql分区

转载 作者:行者123 更新时间:2023-11-29 19:23:38 25 4
gpt4 key购买 nike

我有表“项目”。 1800 万条记录:

CREATE TABLE IF NOT EXISTS `items` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`log_id` int(11) NOT NULL,
`res_id` int(11) NOT NULL,
`link` varchar(255) NOT NULL,
`title` text NOT NULL,
`content` text NOT NULL,
`n_date` varchar(255) NOT NULL,
`nd_date` int(11) NOT NULL,
`s_date` int(11) NOT NULL,
`not_date` date NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `link_2` (`link`),
KEY `log_id` (`log_id`),
KEY `res_id` (`res_id`),
KEY `now_date` (`not_date`),
KEY `sql_index` (`res_id`,`id`,`not_date`)
) ENGINE=Aria DEFAULT CHARSET=utf8 PAGE_CHECKSUM=0 AUTO_INCREMENT=18382133 ;

尝试对该表进行分区时,我创建了它的迷你副本,并在主键和 uniq 键中包含列“not_date”:

CREATE TABLE IF NOT EXISTS `part_items` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`log_id` int(11) NOT NULL,
`res_id` int(11) NOT NULL,
`link` varchar(255) NOT NULL,
`title` text NOT NULL,
`content` text NOT NULL,
`n_date` varchar(255) NOT NULL,
`nd_date` int(11) NOT NULL,
`s_date` int(11) NOT NULL,
`not_date` date NOT NULL,
PRIMARY KEY (`not_date`,`id`),
UNIQUE KEY `link_2` (`not_date`,`link`),
KEY `log_id` (`log_id`),
KEY `res_id` (`res_id`),
KEY `now_date` (`not_date`),
KEY `sql_index` (`res_id`,`id`,`not_date`)
) ENGINE=Aria DEFAULT CHARSET=utf8 PAGE_CHECKSUM=0
/*!50100 PARTITION BY RANGE ( TO_DAYS(not_date))
(PARTITION p_1 VALUES LESS THAN (735963) ENGINE = Aria,
PARTITION p_2 VALUES LESS THAN (736694) ENGINE = Aria) */ AUTO_INCREMENT=18414661 ;

然后我运行 sql_query:

alter table `part_items` PARTITION BY RANGE( TO_DAYS(not_date) ) (
PARTITION p_1 VALUES LESS THAN( TO_DAYS('2014-12-31') ),
PARTITION p_2 VALUES LESS THAN( TO_DAYS('2016-12-31') )
);

然后我尝试选择必须在 p_1 中定义的记录,并解释分区显示搜索仅在 p_1 中。但是当我选择必须位于 p_2 中的记录时,说明分区显示全扫描(p_1,p_2)。我的代码有什么问题吗?查询:

explain partitions SELECT * FROM `part_items` where content like '%k%' and not_date < '2014-05-12'

explain partitions SELECT * FROM `part_items` where content like '%k%' and not_date > '2015-01-01'

还有一个问题:是否可以对 View 进行分区? enter image description here

最佳答案

当通过某些日期函数进行分区时,有可能会提供无效的日期。这会导致NULL;这些值存储在第一个分区中。

这是一个困扰许多开发人员的问题。典型的“解决方法”是将第一个分区清空,以便(通常)最小化查找它的工作量。对于您的情况:

PARTITION p_0 VALUES LESS THAN(0)

对少于 6 个分区进行分区通常不值得;您会添加更多分区吗?

(警告:我的建议来自多年的 MyISAM/InnoDB 分区;我不知道 Aria 的工作方式有何不同。我怀疑分区大部分是在独立于引擎的层处理的。)

关于mysql - 按数据mysql分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42289958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com