zoukankan      html  css  js  c++  java
  • 【Sql server: T-Sql 技术内幕 系列】之索引篇

    本文系 T-Sql技术内幕系列读后感。

    用过数据库的程序猿都知道,索引可以极大的优化sql语句的执行时间,但是您要问我,怎么减少的,我只能说:"抱歉,我也不太清楚。"

    带着这个疑惑,我重读了技术内幕,分享一点书上的所得。

    我们先来建2个表,然后塞几条数据。

    create table Customers
    (
    CustomerID int,
    Cite varchar(20)
    )
    
    insert into Customers(CustomerID,Cite)
    values (1,'Shanghai')
    insert into Customers(CustomerID,Cite)
    values (2,'Beijing')
    
    create table Orders
    (
    CustomerID int,
    OrderID int
    )
    
    insert into Orders(CustomerID,OrderID)
    values(1,11)
    insert into Orders(CustomerID,OrderID)
    values(1,12)
    insert into Orders(CustomerID,OrderID)
    values(2,13)

    这2个表数据很简单:

    A表有客户1,所在cite="Shanghai",客户2,所在Cite="Beijing"。

    B表有客户1的OrderID=11,12两条订单数据,有客户2的OrderID=13的订单数据。

    我们根据上面的数据写如下Sql语句,再看下执行计划。

    select c.CustomerID,COUNT(o.OrderID) as numOrders
    from Customers as C
        left join Orders as O
            on C.CustomerID=O.CustomerID
    where C.Cite='Shanghai'
    Group by C.CustomerID
    having COUNT(o.OrderID)>=2

    数据流的顺序如下图。

    1.表扫描花费18%的开销,然后Sort花费63%的开销。

    那我们在来看下,整个sql语句消耗多长时间。0.017s

    我们给客户表和订单表建上聚集索引。

    create clustered index pk_Customer on Customers(CustomerID)
    create clustered index pk_Customer_Order on Orders(CustomerID,OrderID)

    然后再执行上面的Sql语句,得到下面的执行计划。

    通过上述操作,我们发现,总时间只用0.006s了。

    对于这条Sql,增加索引为我们减少了(0.017-0.006)/0.006=183%

    原来增加索引,可以减少内部数据排序的时间,从来减少开销。

    最后让我们看下这个结论是否正确,让我们再次回到第一个执行计划上,把鼠标放在Sort上,看他的开销。

    消耗时间0.11s

  • 相关阅读:
    [Swift]LeetCode823. 带因子的二叉树 | Binary Trees With Factors
    [Swift]LeetCode822. 翻转卡片游戏 | Card Flipping Game
    [Swift]LeetCode821. 字符的最短距离 | Shortest Distance to a Character
    [Swift]LeetCode818. 赛车 | Race Car
    [Swift]LeetCode817. 链表组件 | Linked List Components
    [Swift]LeetCode816. 模糊坐标 | Ambiguous Coordinates
    [Swift]LeetCode815. 公交路线 | Bus Routes
    [Swift]LeetCode814. 二叉树剪枝 | Binary Tree Pruning
    [Objective-C语言教程]指针(15)
    转 : net use的使用
  • 原文地址:https://www.cnblogs.com/SunnyZhu/p/5715497.html
Copyright © 2011-2022 走看看