Mysql
Mysql:有什麼方法可以正確索引具有相同選項的 3 個 ENUM 列?(A 或 B 或 C)
我有 3 個 enum() 列,裡面有相同的選項值。
我第一次嘗試使用“set”數據類型,它最初是為了做到這一點(從一個集合中保存多個值),但似乎數據類型沒有管理超過 15 年,甚至不支持索引。
有沒有一種很好的方法來索引這 3 列,以便我可以在搜尋中使用它們而不會破壞查詢性能?
從表中選擇 * a=‘x’ 或 b=‘x’ 或 c=‘x’
我考慮過創建一個虛擬欄位,它在 3 個列舉欄位編號上使用布爾邏輯 (&) 並將它們組合成一個大數字,但這是一個相當黑客並且不好維護的方法。
有人優雅地解決了這類任務嗎?(我不想使用支持表並加入它,我想保留一個表)
因為您需要
OR
在謂詞中使用邏輯WHERE
,所以不幸的是,沒有一種方法可以創建index
涵蓋所有情況的邏輯。幸運的是,您基本上是用 a 賺錢的,
virtual field
或者您應該創建 agenerated column
,然後您可以index
在該單列上創建 a ,這樣您的查詢就可以執行。
不再管理集合/不支持索引的原因是:它本質上只是集合的按位表示,以最大限度地減少記憶體使用。
但是,支持高性能集合操作的集合列上的索引將需要在後台為每個每個索引創建多個索引,就好像只需為每個可能的集合條目創建一個布爾列,然後為每個列創建一個單獨的索引(以檢查是否一個值在集合中快速),也可能是列組合的其他索引。
總而言之,這將不再節省空間,並且通過設置/寫入列進行過濾的預期性能將很容易理解。
您最好創建單獨的布爾列或另一個具有 1:n 關係的表,並按照您需要的方式定義索引,因為在大多數情況下,一個擷取所有設置的索引維護成本太高