官术网_书友最值得收藏!

Query compilation essentials

The Query Processor is the component inside the SQL Server Database Engine that is responsible for compiling a query. In this section, we will focus on the highlighted sections of the following diagram, which handle query compilation:

The first stage of query processing is generally known as query compilation and includes a series of tasks that will eventually lead to the creation of a query plan. When an incoming T-SQL statement is parsed to perform syntax validations and ensure that it is correct T-SQL, a query hash value representing that statement as it was written is generated. If that query hash is already mapped to a cached query plan, it can just attempt to reuse that plan. However, if a query plan for the incoming query is not already found in the cache, query compilation proceeds with the following tasks:

  1. Perform binding, which is the process of verifying that the referenced tables and columns exist in the database schema.
  2. References to a view are replaced with the definition of that view. (This is called expanding the view.)
  3. Load metadata for the referenced tables and columns:
    1. The definition of tables, indexes, views, constraints, and so on that apply to the query
    2. Data distribution statistics on the applicable schema objects
  4. Verify whether data conversions are required for the query:
When the query-compilation process is complete, a structure that can be used by the Query Optimizer is produced, known as the algebrizer tree or query tree.

If the T-SQL statement is a Data Definition Language (DDL) statement, there's no possible optimization, and so a plan is produced and executed immediately. However, if the T-SQL statement is a Data Manipulation Language (DML) statement, SQL Server will move to an exploratory process known as query optimization.

主站蜘蛛池模板: 彭州市| 奎屯市| 长治县| 太保市| 洛川县| 马关县| 绿春县| 泉州市| 凌海市| 米泉市| 永州市| 无为县| 凤台县| 丰台区| 会东县| 巢湖市| 新建县| 宁陕县| 利川市| 吴忠市| 华容县| 湟中县| 泰顺县| 绥阳县| 大兴区| 江都市| 宜昌市| 墨竹工卡县| 左贡县| 邯郸市| 宿州市| 德钦县| 常山县| 长寿区| 织金县| 德昌县| 小金县| 中山市| 昌邑市| 梓潼县| 成武县|