首先,是的,这是作业,我一直在努力阅读和理解。什么都没说,为什么一个更好或更坏。无论如何,在使用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?
差得多答案 0 :(得分:8)
打开按姓氏排序的电话簿
查找所有" Smith" s
查找姓氏以" Sm"
查找姓氏以" mith"
你现在看到了吗?
答案 1 :(得分:1)
对索引中的键进行排序,以便更容易找到值。对于字符串类型值,它们按字母顺序排序(升序或降序)。这样可以很容易地根据整个值或其初始值找到任何值。
在开始时对任何内容进行匹配的问题('%mith'
)是SQL Server无法以任何方式使用索引的排序(无法进行查找)。它必须实际遍历整个索引(进行扫描)。
答案 2 :(得分:0)
考虑书本或电话簿背面的索引。一切按字母顺序排列。因此,如果您搜索“Smith”或以“sm”开头的名称,则可以轻松翻到“s”部分并找到名称。如果您搜索以“mith”结尾的每个名称,那么您必须搜索电话簿中的每个页面,因为可能有人的名字以任何字母开头但以“mith”结尾,如姓氏为“blacksmith”的人。