回答
这取决于数据和模式。如果使用like 'a%'
,则Oracle可以使用BTree索引查找匹配项,因为它可以使用模式的开始搜索btree,然后只考虑子树。
这不适用于LIKE '%a'
,但您可以通过创建一个计算列来反转您要搜索的列中的所有值(以便获得上述模式)来解决此问题。
如果使用散列索引,那么Oracle可以做的事情很少,但是需要扫描整个索引。只有几个不同的值时,它可能会更快。
我不确定INSTR
是否可以使用索引,因为它没有固定的锚点。
因此,像所有的性能问题:
- 填写一些真实的测试数据的数据库,并运行一些测试。
- 始终编写代码的方式,它可以很容易地以后进行优化,当你知道有关瓶颈
- 决不猜测可能是缓慢的。 90%的时间你会错的。始终测量。
也许INSTR不那么复杂,但是语句的性能并不取决于所使用的函数是多少使用一些cpu周期来评估,而是从必须检索和评估多少数据来获得结果。 – miracle173 2017-06-09 05:47:42
这个页面说INSTR
是fa韦伯斯特:
http://oracle.veryoo.com/2013/03/performance-comparation-between-like.html
编辑:由于上述 归档链接不再可用: http://web.archive.org/web/20160301212009/http://oracle.veryoo.com/2013/03/performance-comparation-between-like.html
该页面不可用。 – miracle173 2017-06-09 05:32:13
谢谢您搜索了有效链接。但我也有其他的抱怨。不支持仅包含链接的stackexchange答案。链接的相关内容也应在帖子中提供。但我认为在这个环节提出的测量是没有意义的。 'instr(title,'manual')> 0'和'title manual%'这样的标题之间的比较。第一个表达式搜索以'manual'开头的标题,后者搜索包含'manual'的标题。 – miracle173 2017-06-13 06:28:40
除此之外,我们被告知该表有11个Mio。行,我们可以看到流逝的时间,我们不知道表的结构,标题字段的长度,没有执行计划,没有统计,没有关于测试环境。这个测试应该被忽略。 – miracle173 2017-06-13 06:29:03
- 1. SQL中的“LIKE”和“=”有什么区别?
- 2. SQLite中LIKE和GLOB有什么区别?
- 3. Oracle和Microsoft模式有什么区别?
- 4. 有什么区别`和$(Bash中有什么区别?
- 5. LIKE和= MYSQL中的区别?
- 6. Oracle 12c中的JSON_VALUE和JSON_TEXTCONTAINS有什么区别?
- 7. Oracle中的Views和Materialized Views有什么区别?
- 8. 在Oracle数据库中,ROWNUM和ROW_NUMBER有什么区别?
- 9. ==和===有什么区别?
- 10. ==和===有什么区别?
- 11. 有什么区别? :和||
- 12. ==和===有什么区别?
- 13. '=='和'==='有什么区别?
- 14. `&`和`ref`有什么区别?
- 15. 有什么区别:。!和:r!?
- 16. | 0和~~有什么区别?
- 17. Appender和〜有什么区别?
- 18. python中的{}和[]有什么区别?
- 19. 列表中的:::和++有什么区别?
- 20. console.log中的和+有什么区别?
- 21. Perl中的'eq'和'=〜'有什么区别?
- 22. Prolog中的'和“有什么区别?
- 23. MATLAB中的{}和[]有什么区别?
- 24. PHP中的 - >和::有什么区别?
- 25. xtype和别名有什么区别?
- 26. XSD中IDREF和IDREFS有什么区别?
- 27. COM中IDispatch和IUnkown有什么区别?
- 28. 在JavaScript中,'\'和'\ n'有什么区别?
- 29. =和在mysql中有什么区别?
- 30. Lisp中'和#'有什么区别?
另请参阅http://stackoverflow.com/questions/1197026/is-substr-or-like-faster-in-oracle – Vadzim 2016-12-13 11:38:55
对于[MySql](https://stackoverflow.com/questions/2451608/which-是更快的instr或者像这样[回复](https://stackoverflow.com/a/22171511/480894)说INSTR更快。 – Roland 2017-06-13 11:27:28