gpt4 book ai didi

mysql分区不工作

转载 作者:行者123 更新时间:2023-11-29 01:04:45 24 4
gpt4 key购买 nike

好的,我有 200 万行。每个都有一个计费日期。我想在那个日期之前把它分开。我做了分区。我已经检查过/var/lib/mysql 并且文件都在那里,所有文件大小都合适,所以我可以看到一些东西在工作。但是,当我执行 explian paritions select 时,它仍然告诉我它正在使用所有分区。我建表的方式有问题吗?查询表?索引?

CREATE TABLE `billing_bil` (
`id_bil` mediumint(9) unsigned NOT NULL AUTO_INCREMENT,
`bill_date_bil` date NOT NULL
PRIMARY KEY (`id`,`bill_date_bil`),
KEY `bill_date_bil` (`bill_date_bil`),
KEY `type_bill_date_bil` (`type_bil`,`bill_date_bil`)
) ENGINE=MyISAM AUTO_INCREMENT=2310168 DEFAULT CHARSET=latin1
/*!50100 PARTITION BY RANGE ( YEAR(bill_date_bil))
(PARTITION p0 VALUES LESS THAN (2008) ENGINE = MyISAM,
PARTITION p1 VALUES LESS THAN (2009) ENGINE = MyISAM,
PARTITION p2 VALUES LESS THAN (2010) ENGINE = MyISAM,
PARTITION p3 VALUES LESS THAN (2011) ENGINE = MyISAM,
PARTITION p4 VALUES LESS THAN (2012) ENGINE = MyISAM,
PARTITION p5 VALUES LESS THAN (2013) ENGINE = MyISAM,
PARTITION p6 VALUES LESS THAN (2014) ENGINE = MyISAM,
PARTITION p7 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */

EXPLAIN PARTITIONS SELECT SQL_NO_CACHE id_bil FROM billing_bil WHERE bill_date_bil < '2010'
id select_type table partitions type possible_keys key key_len ref rows Extra

 1  SIMPLE       billing_bil  p0,p1,p2,p3,p4,p5,p6,p7  index   bill_date_bil  PRIMARY  6        (NULL)  2310167  Using where; Using index

我原以为该查询只使用 p0 和 p1,但它使用了所有这些。

最佳答案

您的分区没问题。您查询的 WHERE 子句是问题所在。当我在 MySQL 5.5 上运行 EXPLAIN PARTITIONS 语句时,有两个警告:

+---------+------+------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------+
| Warning | 1292 | Incorrect date value: '2010' for column 'bill_date_bil' at row 1 |
| Warning | 1292 | Incorrect date value: '2010' for column 'bill_date_bil' at row 1 |
+---------+------+------------------------------------------------------------------+

如果您将查询更改为使用像这样的真实日期,它将使用分区(我没有在我的 CREATE TABLE 语句中包含您的索引,这就是为什么它们没有被用过):

mysql> EXPLAIN PARTITIONS SELECT SQL_NO_CACHE  id_bil FROM billing_bil WHERE bill_date_bil < '2010-01-01';
+----+-------------+-------------+------------+--------+---------------+------+---------+------+------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------+------------+--------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | billing_bil | p0,p1,p2 | system | NULL | NULL | NULL | NULL | 1 | |
+----+-------------+-------------+------------+--------+---------------+------+---------+------+------+-------+

我猜它使用分区 p2 因为 MySQL 支持部分日期(2010-00-00 小于 2010-01-01): How to deal with "partial" dates (2010-00-00) from MySQL in Django?

关于mysql分区不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6822026/

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