我的意思是,在SQL查询方面,它们是在低级别编译还是解释?它如何在内部工作,它是一个解释或编译的SQL语句?是解释还是编译的DBMS(MySQL,SQL Server ...)?
回答
它通常的工作是这样的:
SQL String ---[Optimizer]---> Execution Plan ---[Execution]---> Result
我个人希望看到优化(查询规划)非常类似的东西编译。它将SQL语句转换成更容易执行的东西。但是,芯片上不是可执行的。这个“编译”相当昂贵 - 就像编译C++代码一样。这是评估不同执行变体的部分;连接顺序,使用哪个索引等等。通过使用绑定参数,尽可能避免这种情况是一种很好的做法。
执行计划,然后由数据库吸收以便执行。但是,该战略已经确定。执行只是在做。这部分是解释执行计划,而不是SQL。
毕竟,这是,在某种程度上,类似于Java或.NET其中汇编接通的源代码转换成可以被更容易地解释的二进制形式。如果我们忽略JIT这个参数,Java程序的执行就是解释这个元代码。
我用这种方式来解释我的free eBook "Use The Index, Luke"的using bind parameters for (Oracle) performance利益。
如果我错了,请纠正我的错误:您可能想补充说,Optimizer可以使用缓存来执行计划,这将解释绑定参数的优势。 – bvh 2017-10-28 13:29:08
在现代SQL环境中,它是一个分阶段的方法,你在工作流程的一定水平作出决定你是否要重新使用和现有的编译块,或者如果你得到一个更好的计划再次启动各阶段参数的某种组合。
我认为这是关之间(再次)的编译时和执行时间(然后编译成可执行代码)结果的报酬。根据查询的复杂性,如果现有代码的执行时间,因为可预见的最小的资源消耗已经很低应用的给定的参数细节在运行时重新编译可能不值得的努力(例如读取两行并返回)。
由于更高的查询复杂性和估计的资源消耗(涉及许多巨大的表,关键的索引选择,可能的表扫描),统计信息的粒度发挥作用。即如果您有选择性,异常值,范围选择性,平均值。字段大小,物理地图大小等,优化器可能会以不同的参数集得出非常不同的结论。
计算为25联接语句与10个++可变参数的最佳方案可能需要时间和资源。如果结果比一对多的版本更快更高效,那么这是值得的。特别是它给定的一组参数可能包含游戏更换器,并且查询将被频繁地重新执行。
最后,您的里程可能会因供应商而异;)
- 1. 是javascript解释还是jit编译
- 2. Clojure是编译还是解释?
- 3. ETL是解释还是编译语言
- 4. php是编译语言还是解释语言?
- 5. .NET VM是编译器还是解释器?
- 6. Oracle是DBMS还是RDBMS的例子?
- 7. 在mysql中解释更高的行数是好还是不好?
- 8. SQL Server:选择vs还是?
- 9. JAVA:解释器还是编译器? Java的文件扩展名?如何执行?
- 10. 解释SQL Server锁
- 11. 我使用SQL Server还是SQL Azure?
- 12. 是我的PHP解释器发疯了,还是我是谁?
- 13. SQL Server编译锁?
- 14. sql-server到mysql的翻译
- 15. Mysql是不是用PHP编译的?
- 16. Guid/UNIQUEIDENTIFIER(SQL Server)中的#是如何解释的
- 17. 解释sys.dm_db_missing_index_group_stats,特别是SQL Server中的inequality_columns
- 18. 解释SQL Server代码
- 19. SQL Server查询解释
- 20. 是否有绕过编译的Java解释器?
- 21. 什么是最好的Scheme解释器或编译器?
- 22. 什么是Perl 5的可用编译器/解释器?
- 23. SQL Server一个表还是两个表?
- 24. XML,SQL Server Compact还是其他?
- 25. SQL Server重新计算还是不?
- 26. SQL Server视图,祝福还是诅咒?
- 27. QMetaObject编译器解释?
- 28. python编译器包解释
- 29. Java编译器/解释器
- 30. 编译解释语言
您是否特别询问MySQL或任何DBMS?因为不同的DBMS在编译vs解释频谱上处于不同的位置 – einpoklum 2016-01-12 13:36:44