最佳化逗號分隔列的查詢
資料庫表通常包含具有逗號分隔值清單的列,這在查詢特定值時帶來了挑戰價值觀。考慮一個具有以下格式的「CATEGORIES」欄位的資料表:
ID | CATEGORIES --------------- 1 | c1 2 | c2,c3 3 | c3,c2 4 | c3 5 | c4,c8,c5,c100
要搜尋特定類別,您最初可以選擇LIKE 語句:
SELECT id FROM table WHERE categories LIKE '%c2%'; -- Returns rows 2 and 3
但是,LIKE 語句對於逗號分隔的列可能效率低。 Oracle 的 FIND_IN_SET() 函數似乎是一個合適的替代方案,但它在 Oracle 10g 中不可用。
更好的方法是使用具有適當通配符的 LIKE:
SELECT * FROM YourTable WHERE ',' || CommaSeparatedValueColumn || ',' LIKE '%,SearchValue,%'
此查詢在搜尋值周圍添加逗號以確保精確匹配。但是,由於使用了 LIKE,它仍然會很慢。
更好的解決方案是將資料重組為具有交叉連結的單獨表,以避免逗號分隔列的限制,從而顯著提高查詢效能。
以上是如何優化資料庫中逗號分隔列的查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!