为什么性能之间存在差异?

时间:2014-03-28 03:23:14

标签: sql sql-server performance tsql

首先,是的,这是作业,我一直在努力阅读和理解。什么都没说,为什么一个更好或更坏。无论如何,在使用Adventureworks数据库的SQL Server中,运行以下3个查询:

USE AdventureWorks2012; 
GO 
--1 
SELECT LastName
FROM Person.Person 
WHERE LastName = 'Smith'; 
--2 
SELECT LastName 
FROM Person.Person 
WHERE LastName LIKE 'Sm%'; 
--3 
SELECT LastName 
FROM Person.Person 
WHERE LastName LIKE '%mith';

LastName是NonClustered索引。为什么查询1和2的执行相同,查询3的执行情况比第一个2?

差得多

3 个答案:

答案 0 :(得分:8)

打开按姓氏排序的电话簿

  1. 查找所有" Smith" s

  2. 查找姓氏以" Sm"

  3. 开头的所有人
  4. 查找姓氏以" mith"

  5. 结尾的所有人

    你现在看到了吗?

答案 1 :(得分:1)

对索引中的键进行排序,以便更容易找到值。对于字符串类型值,它们按字母顺序排序(升序或降序)。这样可以很容易地根据整个值或其初始值找到任何值。

在开始时对任何内容进行匹配的问题('%mith')是SQL Server无法以任何方式使用索引的排序(无法进行查找)。它必须实际遍历整个索引(进行扫描)。

答案 2 :(得分:0)

考虑书本或电话簿背面的索引。一切按字母顺序排列。因此,如果您搜索“Smith”或以“sm”开头的名称,则可以轻松翻到“s”部分并找到名称。如果您搜索以“mith”结尾的每个名称,那么您必须搜索电话簿中的每个页面,因为可能有人的名字以任何字母开头但以“mith”结尾,如姓氏为“blacksmith”的人。