有谁知道最流行数据库的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