where条件顺序与建索引顺序
查询时,如果数据量很大,where 后面的条件与建索引的顺序相同,也没有什么多少差别,聚集索引稍微快点; 但where 后面的条件与建索引顺序不同,速度会慢下来,到底慢多少,不同的机器会不一样,没有绝对的说法。
MSSQL引擎首先对条件进行优化,优化以后再查询。
1,还是那句,先看执行计划。
2.2008的话,对where的顺序它会自己优化,测试过,顺序对执行计划没有影响,不过2005好像有。所以从规范化来说,还是把筛选性高的放在where的前面,而不是考虑是否聚集索引
3.对于建立索引,就有讲究了,统计信息只看索引的第一列,所以创建索引时,筛选性高的那列应该放到索引定义的第一位。
#1.WHERE后面的条件只要一模一样,写在哪儿都是无所谓的。相同环境下,生成的执行计划也是一样的。
#2.至于建立索引的顺序,就有讲究了:1.复合索引的第一个字段最重要,SQL SERVER只生成复合索引第一个字段的统计信息,那么优化器也只能根据复合索引的第一个字段的统计信息来优化查询。2.当你自己从业务上了解了数据分布后,怎样写SQL和怎样建立索引就是一门学问了。有时候要根据SQL语句建立索引,有时候要根据已有索引更改SQL语句(用临时表等方法)。
#3.要想学会创建适合业务的索引,除了业务中的数据分布,你要了解索引的结构(聚集和非聚集),高选择性的概念,数据在页上的存储方式,及看得懂执行计划。
sp_help '表名',拉到最下,有索引的定义
--指的fieldA,fieldB的顺序,也就是说:把fieldA这个字段排在第一位,是要考虑考虑的
CREATE INDEX IX_tablename_fieldA_fieldB ON dbo.tablename
(
FieldB
)
GO
索引顺序有讲究,where一般没有,不过2005及以下版本听说是有的,不过我没环境,你最好试一下
1、那个是符合索引。
2、所谓的索引顺序,其实是复合索引的顺序,两个索引之间没啥顺序可言,具体由sql查询优化器去根据统计信息及查询语句,和当前资源,选择使用哪个索引而已。
1、程序端的sql语句中,mssql对where的顺序会优化。不存在“ 1=1 ”的问题;也不存在“聚集 and 非聚集”的顺序问题。
2、mssql表中的索引顺序,对查询效率有影响,具体的需要结合实际业务——能够将查询结果最小化的索引放置在前面。
(个人见解——其实大多数业务中,应该是主键—聚集索引—非聚集索引)
3、符合索引的“字段A、字段B”——不说了,这个清楚。
主键仅仅为了确保业务上的数据可标识性,实际上可以没有聚集索引(我就改过很多表,把主键上的聚集索引移到别的字段上,效果不错),但是很多业务又真的需要经常使用主键做一些适合聚集索引特性的操作,所以可能这也是微软默认把主键带有聚集索引的理由之一,而且聚集索引能组织数据。对性能和维护来说很重要
where条件顺序与建索引顺序的更多相关文章
- [慢查优化]建索引时注意字段选择性 & 范围查询注意组合索引的字段顺序
文章转自:http://www.cnblogs.com/zhengyun_ustc/p/slowquery2.html 写在前面的话: 之前曾说过"不要求每个人一定理解 联表查询(join/ ...
- MySQL索引 索引分类 最左前缀原则 覆盖索引 索引下推 联合索引顺序
MySQL索引 索引分类 最左前缀原则 覆盖索引 索引下推 联合索引顺序 What's Index ? 索引就是帮助RDBMS高效获取数据的数据结构. 索引可以让我们避免一行一行进行全表扫描.它的 ...
- 查找->静态查找表->分块查找(索引顺序表)
文字描述 分块查找又称为索引顺序查找,是顺序查找的一种改进方法.在此查找算法中,除表本身外, 还需要建立一个”索引表”.索引表中包括两项内容:关键字项(其值为该字表内的最大关键字)和指针项(指示该子表 ...
- ISAM Indexed Sequential Access Method 索引顺序存取方法
ISAM Indexed Sequential Access Method 索引顺序存取方法 学习了:https://baike.baidu.com/item/ISAM/3013855 是IBM发展起 ...
- B-tree R-tree B+-tree indexes 索引顺序存取方法 ISAM MySQL实现拓展ISAM为MyISAM
High Performance MySQL, Third Edition by Baron Schwartz, Peter Zaitsev, and Vadim Tkachenko http://d ...
- ms sqlserver数据库建索引
索引分类:从物理结构上可分为两种:聚集索引和非聚集索引 (此外还有空间索引.筛选索引.XML索引) 因为聚集索引是索引顺序与物理存储顺序一致,所以只能建一个. 聚集索引就是把数据按主键顺序存储: 因为 ...
- MySQL索引(二):建索引的原则
在了解了索引的基础知识及B+树索引的原理后(如需复习请点这里),这一节我们了解一下有哪些建索引的原则,来指导我们去建索引. 建索引的原则 1. 联合索引 我们可能听一些数据库方面的专业人士说过:&qu ...
- Mongodb 3 查询优化(语句优化、建索引)
一.explain(),语句分析工具 MongoDB 3.0之后,explain的返回与使用方法与之前版本有了很大的变化,介于3.0之后的优秀特色和我们目前所使用给的是3.0.7版本,本文仅针对Mon ...
- Python开发应用之-SQL 建索引的几大原则
SQL 建索引的几大原则: 最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>.<.between.like)就停止匹配,比如a = 1 and b = ...
随机推荐
- Map使用操作系统内存的情况
public static void main(String[] args) { System.out.println("程序启动-->可用内存:"+(getSystemMe ...
- python tips: for循环的小问题
在python中,用for对列表进行遍历的时候,迭代器中维护的是列表的索引而不是列表的元素.也就是说,for循环是对索引进行迭代,如果在for循环过程中修改了列表,迭代出来的值是新列表的索引位置,如果 ...
- nginx强制使用https访问(多站点多域名配置)
很多配置过https模板的人都知道,配置https 时 ,站在用户的角度http 和https 的区别根本不清楚.有时候敲 http 时会出现 404 错误,而实际上我们是https. 有朋友找我配置 ...
- Linux下mysql 忘记密码的解决办法
>mysql -u root -p Enter password: ******** Welcome to the MySQL monitor. Commands end with ; or \ ...
- JavaScript CSS 实现简单的 TAB 标签切换
使用CSS隐藏所有tab页,然后使用JavaScript给选中的元素对应ID的tab页设置class="active"类来显示该元素,以此实现tab切换. 如鼠标放置到shwww时 ...
- 【Manthan, Codefest 18 (rated, Div. 1 + Div. 2) B】Reach Median
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 将数组排序一下. 考虑中位数a[mid] 如果a[mid]==s直接输出0 如果a[mid]<s,那么我们把a[mid]改成s ...
- struts配置之namespace
- Python游戏server开发日记(二)绕过GIL启动多线程Python环境
说道Python和多线程,非常easy想到GIL,GIL意味着仅仅要是用Python做的多线程程序.就无法利用多个CPU. 经过一些失败的尝试后,我也一度觉得GIL是无解的.我们甚至把注意力转向了Ir ...
- COCOS2DX 3.0 优化提升渲染速度 Auto-batching
COCOS2DX 3.0 优化提升渲染速度 Auto-batching 近期在看COCOS2DX 3.0的Auto-batching合批与Auto Culling动态缩减功能以下就来细致看看吧:整合好 ...
- OC-JS交互(WebViewJavascriptBridge使用说明)
首先确保一份已经配好功能的html文件. 1.初始化一个webview(viewdidload) UIWebView* webView = [[UIWebView alloc] initWithFra ...