我使用MYSQL作爲數據庫。檢查此表是否定義爲MYSQL中的索引列允許Null值爲索引列或NOT NULL?什麼是好的?
CREATE TABLE `test`.`header`
(
`header_id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
`title` VARCHAR(500) NOT NULL,
`body` VARCHAR(5000) NOT NULL,
`created_by_id_ref` BIGINT UNSIGNED NOT NULL,
`created_date` DATETIME NOT NULL,
`updated_date` DATETIME NULL DEFAULT NULL,
`is_void` TINYINT(1) NULL DEFAULT NULL,
PRIMARY KEY (header_id`)) ENGINE=INNODB CHARSET=latin1 COLLATE=latin1_swedish_ci;
在我的界面中,用戶可以通過從網格視圖中選擇記錄來刪除任何記錄。所以在這種情況下,我只是將「is_void」狀態更新爲true。
我用這個語法聲明瞭這個列。如上所示。再來一次。
`is_void` TINYINT(1) NULL DEFAULT NULL,
所以如果我添加一個索引到這個列是這個列聲明是好的? 在這種情況下,記錄默認值爲空值。對於無效的記錄它將是「1」。 所以,如果我要過濾任何這些記錄爲無效記錄我不得不使用
Select ........ where is_void=1;
如果我要過濾非作廢的記錄,我可以使用
Select ........ where is_void IS NULL;
因此,這是NULL聲明影響我的選擇查詢性能? (請記住我索引此列)
不然我要聲明我列
`is_void` TINYINT(1) NOT NULL,
,然後我有插入「0」非作廢記錄。那麼如果我想過濾無效的記錄,我可以使用
Select ........ where is_void=0;
那麼什麼是最好的? 其中is_void = 0;或者is_void IS NULL;
非常感謝。
檢查執行計劃,你會看到。 – 2014-10-02 07:27:58
我會用'1'和'0'來代替'1'和'null'來實現一致性,約定和更容易的開發。在性能方面,我仍然傾向於'1'和'0'。我也不喜歡'null'。 :) – 2014-10-02 08:03:56
Andy你認爲1和0和1和NULL方法在性能上是否相等?或不同? – Sylar 2014-10-02 09:13:03