SQLite分析SQL As Understood By SQLite

原文:http://www.sqlite.org/lang_explain.html

 
        关键字EXPLAIN”或者语句(by the phrase)“EXPLAIN QUERY PLAN”可以放置在SQL语句之前。(关于这句话提供原文,方便后来者观看An SQL statement can be preceded by the keyword “EXPLAIN”).如果没有EXPLAIN关键字或者语句,SQL语句和平常返回查询信息没有什么两样(Either modification causes the SQL statement  to behave as qeruy and to return informationabout how the SQL statement would have operated if the EXPLAIN keyword orphrase had been omitted.)
 
        “EXPLAIN”和”EXPLAIN QUERY PLAN”的输出主要用于数据交互的分析以及故障的查找。输出内容的详细信息随着当前SQLite版本的不同,会有所变化。应用程序不应该使用该语句,因为执行的结果是不确定的,并且只有少量的信息记录下来(since their exact behavior variable and only partially documented).
注:在sqlite3.exe使用教程一文中,简单介绍了基本使用,并且通过创建索引,来说明如何分析执行的SQL的效率。
 
        当EXPLAIN关键字出现在SQL语句之前说明,查询的过程中会返回虚拟机执行的指令集合,输出到控制台。当使用EXPLAIN QUERY TEXT的时候,会返回更加高级的信息,其实是返回更加详细的信息。实际上返回的信息主要是扫描整表,还是使用了索引去查询,当然前提是必要建立索引



EXPLAIN在运行时被执行,不是在预备时
        EXPLAIN和EXPLAIN QUERY PLAN前缀影响到运行一个调用sqlite3_step的预编译声明的功能。通过调用sqlite3_prepare生成一个新的预编译声明的过程没有受到EXPLAIN的影响。例外的情况是,有一些特殊的操作码禁止使用EXPLAIN QUERY PLAN关键字,归根究底是性能优化的结果。
        意味着调用sqlite3_prepare函数执行的过程中,不会受到EXPLAIN的影响。
1)某些编译声明对sqlite3_prepare起作用,而不是sqlite3_step.这些编译声明不受EXPLAIN影响。
2)不管SQL语句中是否指定EXPLAIN或者EXPLAIN QUERY PLAN关键字,授权回调( authorizer callback)函数都会被执行

猜你喜欢

转载自blog.51cto.com/fengyuzaitu/2429768