按列值对 MySQL 表进行分区
Posted
技术标签:
【中文标题】按列值对 MySQL 表进行分区【英文标题】:Partition MySQL table by Column Value 【发布时间】:2016-10-15 13:48:08 【问题描述】:我有一个包含 2000 万行的 mysql 表。我想分区以提高速度。表格格式如下:
column column column sector
data data data Capital Goods
data data data Transportation
data data data Technology
data data data Technology
data data data Capital Goods
data data data Finance
data data data Finance
我使用以下代码应用了分区:
ALTER TABLE technical
PARTITION BY LIST COLUMNS (sector)
(
PARTITION P1 VALUES IN ('Capital Goods'),
PARTITION P2 VALUES IN ('Health Care'),
PARTITION P3 VALUES IN ('Transportation'),
PARTITION P4 VALUES IN ('Finance'),
PARTITION P5 VALUES IN ('Technology'),
PARTITION P6 VALUES IN ('Consumer Services'),
PARTITION P7 VALUES IN ('Energy'),
PARTITION P8 VALUES IN ('Healthcare'),
PARTITION P9 VALUES IN ('Consumer Non-Durables'),
PARTITION P10 VALUES IN ('Consumer Durables')
);
到目前为止一切都很好,但是当我通过 phpMyAdmin 查看表格时,它会显示:
sector
怎么会小于capital goods
?
我做错了什么?
【问题讨论】:
我请瑞克看看,内德。您还需要为架构和访问路径(UX 及其功能)提供更多详细信息,以便任何人提供帮助。sector
的数据类型是什么?什么版本的 MySQL 服务器? SHOW CREATE 如何反映您的分区?
@Uueerdo 'sector' 是一个字符串,MySQL 是 5.5 版。我不确定你问题的第三部分是什么意思
dev.mysql.com/doc/refman/5.5/en/show-create-table.html 应该返回一个反映表当前结构的创建语句;我不肯定它包含分区(它省略了触发器),但值得尝试看看它是否只是 phpMyAdmin 歪曲,或者 MySQL 对您的更改的解释与您的意图不同。
我认为语言脱节很明显,而 Uu 和我会谈论模式和较低级别的访问,您的经验是使用 phpmyadmin 和字符串。所以不同的世界或多或少。可能很难轻松弥合这种分歧。不确定其他人是否看到昨天的question ...因此也许不需要这个。我们并没有忘记它。
【参考方案1】:
问题只是 phpMyAdmin 以不寻常的方式重新发送数据。数据库现在按预期工作,查询如下:
SELECT * WHERE ... AND sector = "Energy"
运行得更快。
感谢 Drew、Uueerdo、Rick James 和其他所有人帮助我理解这个问题。
【讨论】:
以上是关于按列值对 MySQL 表进行分区的主要内容,如果未能解决你的问题,请参考以下文章