添加组合索引时,做相等运算字段应该放在最前面

 

有一个通常的误解,觉得应该把选择性高的字段放在最前面,这通常只是针对一个字段的索引,对于组合索引,常常要把做等式运算的字段放在最前面,看看测试

USE AdventureWorks
GOCREATE TABLE demo1 
( id INT identity(1,1)  PRIMARY KEY,gender char(1) NOT NULL ,age int NOT NULL,DESCRIPTION varchar(1000) default(replicate('a',1000))  
)--填充数字辅助表
--DROP TABLE  #numSELECT row_number() over( order BY customerid ) AS  number 
INTO #num  
FROM adventureworks.sales.Individual--插入测试数据
INSERT demo1 (gender,age)
SELECT CASE WHEN number%2=0 THEN 'f'ELSE 'm'END,abs(checksum(newid()))%80
FROM #num 

 

创建如下的索引:

CREATE INDEX ix_age_sex ON demo1(age,gender) include(description) WITH (online=on)
 

查询如下的语句:

DBCC FREEPROCCACHE
CHECKPOINT
DBCC DROPCLEANBUFFERSSELECT age,gender,description FROM demo1  
WHERE gender='f' 
AND age BETWEEN 30 AND 40

逻辑读为:

(1236 row(s) affected)
Table 'demo1'. Scan count 1, logical reads 350, physical reads 3, read-ahead reads 346, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

 

现在删除原来的索引,创建低选择性在前的索引

DROP INDEX ix_age_sex ON demo1 
CREATE INDEX ix_age_sex ON demo1(gender,age)INCLUDE (description) WITH (online=on)

在来查询相同的语句:

DBCC FREEPROCCACHE
CHECKPOINT
DBCC DROPCLEANBUFFERSSELECT age,gender,description FROM demo1  
WHERE gender='f' 
AND age BETWEEN 30 AND 40

逻辑读为:

(1236 row(s) affected)
Table 'demo1'. Scan count 1, logical reads 181, physical reads 3, read-ahead reads 178, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

 

可以看到低选择性的字段放在前面逻辑读有350减少到了181,由此产生性能提升

 

总结:1:做等式运算的字段放在最前面,如果有多个等式运算,才要考虑等式运算字段的选择性

 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/fly_zj/archive/2012/08/11/2633629.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/422256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

POJ 1422 Air Raid

二分图的最少边匹配&#xff0c;即找出最少的边可以覆盖所有的点。用匈牙利算法找出最大匹配&#xff0c;则最终结果为&#xff1a;ans 图的顶点数 - 最大匹配。 代码如下&#xff1a; 1 #include<iostream>2 #include<vector> 3 using namespace std;4 #include&…

Winform下载文件

/// <summary>/// 下载文件/// </summary>/// <param name"URL">下载文件地址</param>/// <param name"Filename">下载后的存放地址</param>/// <param name"Prog">用于显示的进度条</param>pu…

knn k的选取_KNN - 初窥K近邻算法

1>算法概述KNN: 全名K-NearestNeighbor&#xff0c;K近邻算法&#xff0c;简单讲就是每个样本都可以用最接近的k个邻居表示&#xff0c;或者说共享同一个标签。KNN是一种分类(classification)算法&#xff0c;它输入基于实例的学习&#xff08;instance-based learning&…

前端学习(535):多列布局2

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>css多列布局</title><style>.parent{co…

刚装了fedora 17,装机必备,解决视频格式和中文输入法。

今天把ubuntu 12.04换成了fedora 17&#xff0c;喜欢gnome3的感觉&#xff0c;呵呵。为了刺激英语学习&#xff0c;特意选择的英文。结果就是没了中文输入法。。。。我的电脑是64位的&#xff0c;32位的同学变通下。 中文输入法&#xff1a; $ sudo yum install sunpinyin.i686…

前端学习(536):多列布局3列得间距

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>css多列布局</title><style>.parent{co…

Silverlight 5 Features

原文下载地址Improved media support Low Latency Audio Playback: Use the SoundEffect API to trigger low-latencysound Variable Speed Playback: allows video to be played at different speedsand supports fast-forward and rewind. At up to twice th…

scp会覆盖同名文件吗_你会Hypermesh一键式完成几何文件到求解文件的输出吗?

前不久&#xff0c;我在仿真秀APP更新了2篇Hypermesh二次开发的文章&#xff0c;介绍了《Hypermesh二次开发之电子产品跌落全流程开发讲解》和《前处理软件Hypermesh二次开发如何从入门到精通》&#xff1b;同步推出了《Hypermesh 二次开发高级培训11讲》线上视频课程&#xff…

前端学习(537):多列布局4横跨多列

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>css多列布局</title><style>.parent,.p…

JSONP 跨域共享信息

定义来源&#xff1a;http://zh.wikipedia.org/wiki/JSONP JSONP&#xff08;JSON with Padding&#xff09;是资料格式 JSON 的一种“使用模式”&#xff0c;可以让网页从别的网域要资料。另一个解决这个问题的新方法是跨来源资源共享。 由于同源策略&#xff0c;一般来说位于…

crontab 每周五_crontab定时任务 每隔一周的周五执行

定时任务每隔一周的周五执行 * * * * 05 /bin/bash -c (($(date +\%s) / 86400 \% 14)) && your-script 测试是否成功执行命令 写入定时任务 crontab -e 01 04 * * 05 /bin/bash -c (($(date +\%s) / 86400 \% 14)) && /bin/date +\%F_\%w >>/tmp/date.l…

jdbc各种数据库的连接说明

-------------------------------oracle--------------------------------驱动&#xff1a;oracle.jdbc.driver.OracleDriver URL&#xff1a;jdbc:oracle:thin:<machine_name><:port>:dbname 注&#xff1a;machine_name&#xff1a;数据库所在的机器的名称&#…

linux mysql 端口配置文件_linux虚拟机中各服务端口及配置文件路径

查询端口状况命令&#xff1a; netstat -an| grep 端口号查询服务状态(服务是否开启)命令&#xff1a;systemctl status 服务名开启服务命令&#xff1a;systemctl start 服务名1. ssh服务&#xff1a;端口 &#xff1a;22 配置文件路径&#xff1a;/etc/ssh/ssh.con…

前端学习(539):全屏布局得实现

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>全屏布局</title><style>html,body{mar…

【翻译】Pro.Silverlight.5.in.CSharp.4th.Edition - 第三章 布局 03

目录&#xff1a;点击这里 上一篇&#xff1a;【翻译】Pro.Silverlight.5.in.CSharp.4th.Edition - 第三章 布局 02 使用Canvas基于坐标布局 到目前为止我们还剩下Canvas没有学习到。Canvas可以让我们使用精确坐标给元素设置位置。对于设计一个以数据为主导的窗体和标准对话框来…

mysql mvcc 隔离级别_关于 Mysql 四种隔离级别中 Lock 和 MVCC 的关系

读写锁共享锁(share lock)&#xff5c; 读锁(read lock)读锁是共享的&#xff0c;或者说是相互不阻塞的。多个客户在同一时刻可以同时读取同一个资源&#xff0c;而互不干扰SELECT ... LOCK IN SHARE MODE排他锁(exclusive lock)&#xff5c; 写锁(write locl)写锁则是具有排他…