Mysql

布爾列 true 和 false 與 true 和 null 哪個更好?

  • August 23, 2022

當我們需要在數據庫中儲存布爾欄位時,哪個更好?true 和 null 或 true 和 false 的組合。

我看過很多文章說要使用真假。一些報告說 true 和 null 組合提供了更好的性能。

我正在用 Ruby on Rails 和 mariadb 設計一個網站。我需要將布爾狀態欄位添加到具有 100 萬行的表中。

此狀態欄位的用途是過濾和報告。

在 MySQL / MariaDB / InnoDB 中,NULL索引就像它只是另一個可能的值一樣。

有什麼關係…

  • 用於NULL業務邏輯,而不是性能。例如:“尚未回答”、“拒絕說明”、“N/A”、“尚不清楚”(例如end_time)、“不關心”。
  • 測試是否相等: ( x = 0, x = false, x IS NULL, x = 1, x = true) 比測試不等式要好。(一些,不是全部,優化在相等性測試中效果更好。)
  • INDEX通常,永遠不會使用布爾量上的單列。例外情況是其中一個值很少出現並且您正在測試是否等於該值。
  • 另一方面,擁有一個INDEX包含布爾列的複合是非常好的。(同樣,您需要測試是否相等,而不是不平等。)
  • 即使你把布爾值放在首位並且它的選擇性很差,優化器也可能能夠很好地利用索引。在這個極端範例INDEX(is_deleted, created_at)中,無論表大小或選擇性如何,都只需要查看 1 行:
WHERE is_deleted = false  -- Similarly:  deleted_date IS NULL
ORDER BY created_at       -- ASC or DESC
LIMIT 1

引用自:https://dba.stackexchange.com/questions/315888