文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  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 表格。