2016-06-14 78 views
2

我有一个拥有2000万行的MySQL表。查询这个数据库花费的时间太多。数据库的格式如下:SQL:按列值划分

Column Column Column Sector 

data  data  data  Retail 
data  data  data  Utility 
data  data  data  Retail 
data  data  data  Insurance 
data  data  data  Retail 
data  data  data  Agriculture 
data  data  data  Agriculture 
data  data  data  Retail 

我希望能够按扇区对数据库进行分区。这应该可以提高指定扇区的查询的速度。我已经尝试了以下,它不起作用。我哪里错了?

Alter table 'technical' partition by values in `sector` 
+1

https://dev.mysql.com/doc/refman/5.7/en/partitioning -types.html –

+0

@GordonLinoff我已经看过,但作为一个初学者,我不确定使用哪个。 –

+1

由于您的表已经包含数据..您的alter语句将不起作用。创建分区时最好创建它自己的表..其中一个更简单的步骤是步骤1:从旧的创建一个新的分区表表使用语法(包括分区子句)步骤2:删除或重命名旧表第3步:将步骤1中创建的表重命名为删除表的名称。 – Dawn

回答

4

https://dev.mysql.com/doc/refman/5.7/en/partitioning-types.html

从这些分区类型,我觉得列表的列分区将是你最好的选择。从这里你可以了解一下更详细..

https://dev.mysql.com/doc/refman/5.7/en/partitioning-columns-list.html

你的代码看起来应该像..

ALTER TABLE technical 
PARTITION BY LIST COLUMNS (sector) 
    (
    PARTITION p01 VALUES IN ('Retail'), 
    PARTITION p02 VALUES IN ('Utility'), 
    PARTITION p03 VALUES IN ('Insurance'), 
    PARTITION p04 VALUES IN ('Agriculture') 
); 
+0

嗨阿里夫,谢谢你的伟大答案。如果你有几分钟的备用空间,请看看这个后续问题:http://stackoverflow.com/questions/37818604/partition-mysql-table-by-column-value –

+0

任何方式来使未分类的分区,为任何未列出的值? – Hitesh