文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  FEDERATED 儲存引擎注意事項與提示

18.8.3 FEDERATED 儲存引擎注意事項與提示

使用 FEDERATED 儲存引擎時,您應該注意以下幾點:

  • FEDERATED 資料表可能會複製到其他複本,但您必須確保複本伺服器能夠使用在 CONNECTION 字串(或 mysql.servers 資料表中的資料列)中定義的使用者/密碼組合,連線至遠端伺服器。

下列項目指出 FEDERATED 儲存引擎支援和不支援的功能:

  • 遠端伺服器必須是 MySQL 伺服器。

  • FEDERATED 資料表所指向的遠端資料表在您嘗試透過 FEDERATED 資料表存取該資料表之前必須存在。

  • 一個 FEDERATED 資料表可以指向另一個,但您必須小心不要建立迴圈。

  • FEDERATED 資料表不以一般意義支援索引;由於對資料表的資料存取是遠端處理的,因此實際上是遠端資料表在使用索引。這表示,對於無法使用任何索引而需要完整資料表掃描的查詢,伺服器會從遠端資料表擷取所有資料列,並在本地篩選它們。無論此 SELECT 陳述式使用任何 WHERELIMIT,都會發生這種情況;這些子句會在本地應用於傳回的資料列。

    因此,無法使用索引的查詢可能會導致效能不佳和網路超載。此外,由於傳回的資料列必須儲存在記憶體中,因此這類查詢也可能導致本機伺服器交換,甚至停止回應。

  • 建立 FEDERATED 資料表時應小心,因為可能不支援來自對等 MyISAM 或其他資料表的索引定義。例如,如果資料表在任何 VARCHARTEXTBLOB 資料行上使用索引首碼,則建立 FEDERATED 資料表會失敗。以下使用 MyISAM 的定義是有效的:

    CREATE TABLE `T1`(
        `A` VARCHAR(100),
        UNIQUE KEY(`A`(30))
    ) ENGINE=MYISAM;

    本範例中的索引首碼與 FEDERATED 引擎不相容,而且對等的陳述式會失敗:

    CREATE TABLE `T1`(
        `A` VARCHAR(100),
        UNIQUE KEY(`A`(30))
    ) ENGINE=FEDERATED
      CONNECTION='MYSQL://127.0.0.1:3306/TEST/T1';

    如果可能,您應該嘗試在遠端伺服器和本機伺服器上建立資料表時,將資料行和索引定義分開,以避免這些索引問題。

  • 在內部,實作會使用 SELECTINSERTUPDATEDELETE,但不會使用 HANDLER

  • FEDERATED 儲存引擎支援 SELECTINSERTUPDATEDELETETRUNCATE TABLE 和索引。它不支援 ALTER TABLE,或任何會直接影響資料表結構的資料定義語言陳述式,除了 DROP TABLE 之外。目前實作不使用預先準備的陳述式。

  • FEDERATED 接受 INSERT ... ON DUPLICATE KEY UPDATE 陳述式,但如果發生重複索引鍵違規,則陳述式會失敗並顯示錯誤。

  • 不支援交易。

  • FEDERATED 會執行大量插入處理,以便將多個資料列以批次方式傳送到遠端資料表,這可以提高效能。此外,如果遠端資料表是交易式的,則它會讓遠端儲存引擎在發生錯誤時正確執行陳述式回滾。此功能具有下列限制:

    • 插入的大小不能超過伺服器之間的最大封包大小。如果插入超過此大小,則會將其分割成多個封包,並可能發生回滾問題。

    • 大量插入處理不會發生於 INSERT ... ON DUPLICATE KEY UPDATE

  • FEDERATED 引擎無法得知遠端資料表是否已變更。原因在於,此資料表必須像一個資料檔案一樣運作,除了資料庫系統以外的任何東西都永遠不會寫入該檔案。如果遠端資料庫有任何變更,則本機資料表中的資料完整性可能會遭到破壞。

  • 使用 CONNECTION 字串時,您無法在密碼中使用 '@' 字元。您可以使用 CREATE SERVER 陳述式來建立伺服器連線,以解決此限制。

  • insert_idtimestamp 選項不會傳播到資料提供者。

  • 針對 FEDERATED 資料表發出的任何 DROP TABLE 陳述式只會卸除本機資料表,而不會卸除遠端資料表。

  • 不支援為 FEDERATED 資料表定義使用者分割區。