Mysql
添加索引並通過索引搜尋或添加唯一約束並讓插入失敗更好?
我有一張表,其中包含超過 250 萬條生產記錄,用於跟踪特定使用者是否已經查看過工作:
mysql> DESCRIBE job_views; +--------------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | job_id | int(11) | YES | | NULL | | | session_id | varchar(255) | YES | MUL | NULL | | | created_at | datetime | YES | | NULL | | | updated_at | datetime | YES | | NULL | | +--------------------+--------------+------+-----+---------+----------------+
在向表中添加一行之前,我想確保不存在具有相同
job_id
and的行session_id
。目前,應用程序在表中查詢匹配的行(目前沒有索引,儘管已在兩列上添加了索引),但我相信唯一約束更有意義。
SELECT
使用索引和INSERT
如果沒有找到行與INSERT
因為唯一約束而失敗之間有區別嗎?如果是這樣,哪個更可取(或者我該如何做出決定)?
使用唯一約束(唯一索引),這正是它們的用途。
不同之處在於您的程式碼。如果使用唯一約束方法,則需要擷取 dbms 將在重複條目上拋出的錯誤,但如果首先顯式檢查值,則不需要擷取錯誤。
但是,如果您不使用唯一約束方法,您並沒有真正限制數據庫級別的數據複製,從而使數據很容易被另一個應用程序破壞,甚至是粗心的開發人員正在執行的維護腳本或dba。