2016-06-14 54 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