動態生成表-判斷表是否存在效能對比

秋夜雨巷發表於2024-11-05

SHOW TABLES LIKE 查詢

直接使用 SHOW TABLES LIKE 'table_name' 來判斷表是否存在。結果為空表示表不存在。

$tableName = 'your_table_name';
$res = Db::query("SHOW TABLES LIKE '{$tableName}'");
if (empty($res)) {
    echo "表不存在";
} else {
    echo "表已存在";
}

INFORMATION_SCHEMA 查詢

查詢 INFORMATION_SCHEMA.TABLES 表,該表儲存了所有資料庫的表資訊。對於包含大量表的資料庫,因為可以直接查詢目標表的資訊,比 SHOW TABLES LIKE 更有效。

$tableName = 'your_table_name';
$dbName = 'your_database_name';
$res = Db::query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '{$dbName}' AND TABLE_NAME = '{$tableName}'");
if (empty($res)) {
    echo "表不存在";
} else {
    echo "表已存在";
}

Try-Catch 捕獲異常

嘗試對錶執行一條簡單的查詢,如果表不存在會丟擲異常,可以透過捕獲異常來判斷表是否存在。

$tableName = 'your_table_name';
try {
    Db::query("SELECT 1 FROM {$tableName} LIMIT 1");
    echo "表已存在";
} catch (Exception $e) {
    echo "表不存在";
}

總結

SHOW TABLES LIKE:簡單直接,適合小型資料庫。
INFORMATION_SCHEMA 查詢:適合包含大量表的資料庫,尤其是在需要批次判斷多張表的情況下。
Try-Catch:更適合在查詢操作中附帶判斷,不適合高頻使用。

相關文章