索引分类:从物理结构上可分为两种:聚集索引和非聚集索引 (此外还有空间索引、筛选索引、XML索引)

因为聚集索引是索引顺序与物理存储顺序一致,所以只能建一个。

  • 聚集索引就是把数据按主键顺序存储;
  • 因为一张表中的数据只能有一个物理顺序,所以一张表只能有一个主键/聚集索引。

非聚集索引可以建1或者N个。

并不是所有字段上都可以建索引,有的字段类型如text、image、nvarchar(max)等是不可以建索引的。

sql语句有多个条件用and连接时,多个字段都有索引的话,顺序很重要。

索引是存在磁盘的文件,一个表上如果有100个列,但是不能建太多索引,因为进行插入,修改,删除时都需要对索引文件进行修改,会影响增删改的效率,所以要平衡索引的个数。

索引的数据结构长什么样子呢?

文章:SQL Server 索引(一)数据结构和存储结构

讲了索引概念和结构。

在SQL Server数据库中,索引的存储是以B+树(注意和二叉树的区别)结构来存储的,又称索引树,其节点类型为如下两种:

  • 索引节点;
  • 叶子节点

索引节点按照层级关系,有时又可以分为根节点和中间节点,其本质是一样的,都只包含下一层节点的入口值和入口指针;

叶子节点就不同了,它包含数据,这个数据可能是表中真实的数据行,也有可能是索引列值和行书签,前者对应于聚集索引,后者对应于非聚集索引。

通过DBCC IND命令来查看索引的情况

DBCC IND ([PCT], [DBO.Employee], -1)

具体例子可以到上文的博客处查看。

非聚集索引的include理解,这个索引的数据结构息息相关。

  • 索引覆盖和非聚集索引的根节点和中间节点一样,都是索引页,都只包含下一层的入口指针和入口值。
  • 索引覆盖的叶节点却稍有不同,多了一列DepartmentCode,此列即为索引覆盖列,而且此列只在叶节点出现,如果查询时,只需返回键值列和索引覆盖列,则只需索引查找,肯本无需访问数据页,不仅提高了性能,而且节省占用空间。

本次优化记录:

1,把多个and order_State<>2 and order_State<>-1and order_State<>-10and order_State<>-20等修改成,and order_State not in(-20,-10,-1,2)查询速度快了很多。

2,在DateTime字段上建了索引,又提高了几秒。

下面的表格阐述了什么时候应该用非簇聚索引,什么时候用簇聚索引:

动作描述 使用聚集索引 使用非聚集索引
列经常被分组排序
返回某范围内的数据 不应
一个或极少不同值 不应 不应
小数目的不同值 不应
大数目的不同值 不应
频繁更新的列 不应
外键列
主键列
频繁修改索引列 不应

把流水表修改成一个单表,增加字段数,尝试优化。

文章:SQL Server基础之索引  待阅读。

ms sqlserver数据库建索引的更多相关文章

  1. oracle直接读写ms sqlserver数据库(一)如何下载oracle database gateway for sqlserver

    想从Oracle实时同步数据到Ms Sqlserver,需要在Oracle里面直连Sqlserver进行数据的读写,可以在Oracle服务器上安装oracle database gateway for ...

  2. 通过DBCC整理Sqlserver数据库表索引碎片

    昨天检查了一张效率极慢的表,两年多没有维护,逻辑扫描碎片高达99.%,于是开始对这个表进行重点跟踪和记录日志.今天用DBCC SHOWCONTIG WITH TABLERESULTS 命令检查了一下所 ...

  3. oracle直接读写ms sqlserver数据库(二)配置透明网关

    环境说明: 数据库版本:11gR2 透明网关版本:11g 操作系统Windows Server2008_64位 ORACLE_HOME目录:D:\app\Administrator\product\1 ...

  4. linux 使用 pyodbc 访问 ms sqlserver 数据库

    一.安装linux下Sqlserver的驱动程序: 我们先来安装SqlServer的驱动程序,再安装ODBC相关的,目的是想尽快可以进行测试,因为在安装完Freetds之后,我们马上就可以在linux ...

  5. SqlServer数据库字典--索引.sql

    SELECT TOP 100 PERCENT --a.id,       CASE WHEN b.keyno = 1 THEN c.name ELSE '' END AS 表名,       CASE ...

  6. MS SQLserver数据库安装

    SQL2008的安装 1,双击打开setup安装文件 2,点击“全新安装或向现有安装添加功能” 3,安装程序支持规则,安装完之后,点击确定 4,输入产品的密钥,点击下一步 5,弹出“安装程序支持文件” ...

  7. ms sqlserver数据库主文件特别大怎么办

    因为项目中需要复制数据库,作为外网测试的数据库,但是数据库特别大,复制特别费劲,即使只复制主文件,主文件也特别大. 然后百度了下,发现数据库有个收缩功能,数据库右键——任务——收缩,可以对数据库进行收 ...

  8. 在项目中迁移MS SQLServer到Mysql数据库,实现MySQL数据库的快速整合

    在开发项目的时候,往往碰到的不同的需求情况,兼容不同类型的数据库是我们项目以不变应万变的举措之一,在底层能够兼容多种数据库会使得我们开发不同类型的项目得心应手,如果配合快速的框架支持,那更是锦上添花的 ...

  9. 简单的3个SQL视图搞定所有SqlServer数据库字典

    网上有很多SQL SERVER数据库字典的SQL语句,七零八落,我在工作整理了一下思路,总结SQL代码如下.数据库字典包括表结构(分2K和2005).索引和主键.外键.约束.视图.函数.存储过程.触发 ...

随机推荐

  1. SPRING-BOOT系列之Spring4快速入门

    上节 : spring boot简介 接着上章节的spring boot简介,我们会发现boot是基于spring的,其中最重要的就是spring容器了.那么本章着重介绍spring容器装配自定义be ...

  2. RAID基础

    磁盘类型 类型 IDE Integrated Drive Electronics SATA Srial ATA SCSI Small Computer System Interface FC Fibe ...

  3. solr 常见异常

    solr4.3本地数据提交异常分析 (2013-06-19 16:03:15) 转载▼   异常一. Exception in thread "main" java.lang.No ...

  4. CentOS Linux下MySQL 5.1.x的安装、优化和安全配置

    下载页面:http://dev.mysql.com/downloads/mysql/5.1.html#downloads 到页面底部,找到Source downloads,这个是源码版本,下载第1个T ...

  5. Windows API函数大全四

    10. API之硬件与系统函数 ActivateKeyboardLayout 激活一个新的键盘布局.键盘布局定义了按键在一种物理性键盘上的位置与含义 Beep 用于生成简单的声音 CharToOem ...

  6. JUnit的好搭档-Hamcrest

    一.Hamcrest简介 Hamcrest是一个用于编写匹配器(matcher)对象的框架,允许以声明方式定义“匹配(match)”规则.它可以与JUnit框架配合使用,使断言可读更高,更加灵活(例如 ...

  7. BZOJ3083: 遥远的国度(树链剖分)

    题意 $n$个节点的树,每个点有权值,支持三种操作 1. 换根 2.把$x$到$y$路径上节点权值变为$z$ 3.询问路径最小值 Sol 啥?你说这是TopTree的裸题?那你写去啊 很显然,如果没有 ...

  8. LR 两种录制:html与url

    一直在使用LR,对于Html_based script和Url-based script 两种录制方式之间,要如何选择,仍是一知半解.最近测试时遇到同样的业务功能,两种录制方式的脚本,单次执行时间差别 ...

  9. tomcat 的log4j配置问题

    #log4j.rootLogger=DEBUG,stdout,filelog4j.rootLogger=ERROR,stdout,filelog4j.appender.stdout=org.apach ...

  10. Navicat工具备份还原mysql数据库详细图解

    Navicat是个很不错的MYSQL数据库管理工具,我们常用的还web形式的phpmyadmin和font这三种了,都是非常不错的mysql管理工具.因为Navicat工具兼容性比较好,操作也比较简单 ...