有誰知道最流行數據庫的SQL LIKE
運算符的複雜程度是多少?SQL`LIKE`複雜性
回答
讓我們分別考慮三個核心案例。這個討論是針對MySQL的,但也可能適用於其他DBMS,因爲索引通常以類似的方式實現。
LIKE 'foo%'
如果在索引列上運行,則會很快。 MySQL索引是B樹的一種變體,因此執行此查詢時,它可以簡單地將樹下降到與foo
對應的節點或具有該前綴的第一個節點,並向前遍歷樹。所有這些都非常有效。
LIKE '%foo'
無法通過索引加速並導致全表掃描。如果您有其他標準可以通過使用索引執行,它只會掃描初始過濾後剩下的行。
有一招雖然:如果您需要做後綴匹配 - 與擴展.foo
搜索文件名,例如 - 您可以通過添加具有相同內容的列作爲原之一,但與達到同樣的性能字符按相反順序排列。
ALTER TABLE my_table ADD COLUMN col_reverse VARCHAR (256) NOT NULL;
ALTER TABLE my_table ADD INDEX idx_col_reverse (col_reverse);
UPDATE my_table SET col_reverse = REVERSE(col);
搜索與col
行在.foo
結束就變成了:
SELECT * FROM my_table WHERE col_reverse LIKE 'oof.%'
最後,還有LIKE '%foo%'
,對此沒有任何捷徑。如果沒有其他限制條件將行數減少到可行數量,則會導致性能下降。您可能需要考慮全文搜索解決方案,或者其他專業解決方案。
取決於RDBMS,數據(以及可能的數據大小),索引以及如何使用LIKE(帶或不帶前綴通配符)!
你問的問題太籠統了。
是的,我想,但這是一個朋友的問題,他沒有告訴我更多。 – GhassanPL 2009-04-29 18:58:10
如果你問有關性能的影響:
像的問題是,它會使數據庫使用的索引。在Oracle上我認爲它不再使用索引(但我仍然在Oracle 9上)。如果通配符只在最後,SqlServer使用索引。我不知道其他數據庫。
防止對索引進行隨機訪問,但肯定不掃描索引(儘管它可能會更改它使用的索引)? – 2009-05-28 00:35:48
- 1. 複雜性復發
- 2. 匹配SQL Server LIKE中的複雜模式?
- 3. 獲取最大日期SQL複雜性
- 4. SQL查詢的計算複雜性
- 5. 複雜的SQL語句的可行性
- 6. 複雜性類
- 7. Hashtbl.create複雜性
- 8. 複雜性將
- 9. SQL複雜查詢
- 10. SQL複雜工會
- 11. 複雜LAMBDA到SQL
- 12. SQL查詢複雜
- 13. 複雜SQL編寫
- 14. SQL複雜約束
- 15. 複雜雄辯SQL
- 16. SQL複雜條件
- 17. SQL複雜主鍵
- 18. 複雜SQL代碼
- 19. SQL複雜樹行
- 20. SQL複雜查詢
- 21. 空間複雜性復發
- 22. itertools.permutations的複雜性
- 23. Tableview UiDesign複雜性
- 24. 複雜性證明
- 25. Object.keys()的複雜性?
- 26. RandomAccessFile Java - 複雜性
- 27. 複雜性結合
- 28. 降低複雜性
- 29. Perl的複雜性?
- 30. List.mem的複雜性
請說明您的意思是「複雜性」。 – 2009-04-29 11:52:30
對不起,我是在問這個朋友,他的意思是大O,但這就是我所知道的。 – GhassanPL 2009-04-29 18:56:07