簡體   English   中英

如何創建沒有主鍵的 MySql 分區?

[英]How to Create MySql Partitions without primary key?

我有一個使用序列號作為主鍵的數據庫。 除了有一個可以復制的名為“date_time”的列。

現在我需要使用date_time進行分區,如下所示。

ALTER TABLE data
PARTITION BY RANGE (TO_DAYS('date_time')) (
 PARTITION p20220103 VALUES LESS THAN (TO_DAYS('2022-01-04 00:00:00')),
 PARTITION p20220104 VALUES LESS THAN (TO_DAYS('2022-01-05 00:00:00')),
 PARTITION p20220105 VALUES LESS THAN MAXVALUE
);

由於date_time不是data表中的主鍵,我無法創建分區。

ERROR 1503 (HY000): A PRIMARY KEY must include all columns in the table's partitioning function (prefixed columns are not considered).

我應該如何創建分區而不添加date_time作為主鍵?

你不能。 規則很簡單,在https://dev.mysql.com/doc/refman/8.0/en/partitioning-limitations-partitioning-keys-unique-keys.ZFC35FDC70AD5FC69D236EZ878中說明:

表上的每個唯一鍵都必須使用表分區表達式中的每一列。

如果表有一個主鍵或唯一鍵,但該鍵不包括分區表達式中的列,那么當您插入新行而不檢查每個分區是否有重復項時,它不能強制唯一性。

解決此問題的唯一方法是允許像date_time這樣的列作為分區表達式,即定義沒有主鍵或唯一鍵的表

這有其自身的危害。 您可能需要一個唯一鍵,以便您可以單獨處理行以更新或刪除它們。 如果您的表沒有主鍵,基於行的復制也會變得非常低效。

這通常意味着您無法按date_time對表進行分區,甚至根本無法對表進行分區。 但這並不總是一件壞事。 分區不一定會帶來很大的好處。 分區甚至會導致更多的復雜性,因為您可能有查詢,無論如何都要搜索每個分區。

分區不是萬能的,而且經常是一種負擔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM