前面一篇说法了索引结构,和几种索引在数据表上的结构,了解了索引可以为查询服务,这篇说一说如何创建索引。

  >平时可能的创建方式

  这个系统中要用到A字段,B字段,C字段做为查询的条件,联接的条件较多,有些地方有A,B组合查询的,有些地方有A,C组合查询的,这些是前提,我大概认为是这样的。到目前为止我看到的同学们建索引都是 A,B,C各建一个索引,下面慢慢说这里有什么问题,也有可能没有问题,得看情况。

  >建索引应该考虑条件(查询,联接等),查询字段,数据的分布

  1)条件,这个很个很是被大家接受,很多都是条件上建索引的。比如下面代码

select * from tb where a>100 and b between 100 and 200;

  那么这个很多同学就会 create index on tb(a),create index on tb(b),如果再来个c可能还会create index on tb(c),这个就和上面所说的情况相似了,那这种建法对不对,可能对,但是这种建法是不动脑筋的建法。这个查询只会用得到一个索引,如果大面积的这样的话,可能有一个索引就是完完全全的浪费的,所在要综合考虑,比如b字段长期是在一个小范围内查询,那么你就直接在b字段上创建就行了。如果a,b重复少,你又追求性能,那么可以create index on tb(b,a)这样子来建,这里有同学可能不明白为什么(b,a),(a,b)不一样吗?是不一样的,看前面我说的条件是b长期是在很小一个内容段的筛选,所以是以b为主导,想相一下,B树节点里面是b,a的一个组合,先按b排序,再按a排序,就像group by b,a 和 group by a,b的结果不一样吧。这一段比较重要的是这样的查询只会用到一个索引,应该说一个查询最多能用到一个索引。

  2)查询字段,这个也就是和select后面部分选哪些字段也是有关系的。比如

select id from tb where id >100;
select id,col1 from tb where id >100;

  这两个在id为索引条件查询速度是不一样的。但是在 on tb(id) include(col1)的情况下几乎认为一样,当然col1的数据大小也是有关系的,因为大小不同读取的数据页不同。所以说建索引有时也要考虑select后面的字段。

  3)数据的分布,其实这个应该才是这一部分决定性因素。

  比如上面1)所说的情况有多个索引的情况下我们没有显示提示,那么SQLServer会决定选择以哪个索引来查询呢,这个就是与数据分布有关,这里SQLServer会对有索引的表的数据记录统计信息,然后根据统计信息来选择用只个索引。所以在不同时期用到的索引可能不一样。

  >总结
  1.一次查询用到一个索引,当然也有可能一个都不用,也可能你有索引SQLServer也不用。
  2.分清索引键和其它字段的查询有什么不同,这个我感觉我暂是也没说清楚,可以参考前一篇来学习。
  3.存在统计信息这个东西。

数据库索引<二> 如何创建索引的更多相关文章

  1. oracle数据库什么情况下创建索引比较好

    索引就好象一本字典的目录.凭借字典的目录,我们可以非常迅速的找到我们所需要的条目.数据库也是如此.凭借Oracle数据库的索引,相关语句可以迅速的定位记录的位置,而不必去定位整个表. 虽 然说,在表中 ...

  2. lucene全文搜索之二:创建索引器(创建IKAnalyzer分词器和索引目录管理)基于lucene5.5.3

    前言: lucene全文搜索之一中讲解了lucene开发搜索服务的基本结构,本章将会讲解如何创建索引器.管理索引目录和中文分词器的使用. 包括标准分词器,IKAnalyzer分词器以及两种索引目录的创 ...

  3. lucene全文搜索之三:生成索引字段,创建索引文档(给索引字段加权)基于lucene5.5.3

    前言:上一章中我们已经实现了索引器的创建,但是我们没有索引文档,本章将会讲解如何生成字段.创建索引文档,给字段加权以及保存文档到索引器目录 luncene5.5.3集合jar包下载地址:http:// ...

  4. 数据库(二)—— MySQL索引优化

    目录 MySQL的索引优化 一.MySQL 5.7的初始化配置 二.MySQL配置文件 1.配置 2.配置文件作用 三.多实例 1.创建相关的目录 2.创建实例的配置文件 3.初始化 4.授权 5.启 ...

  5. Mysql高级操作学习笔记:索引结构、树的区别、索引优缺点、创建索引原则(我们对哪种数据创建索引)、索引分类、Sql性能分析、索引使用、索引失效、索引设计原则

    Mysql高级操作 索引概述: 索引是高效获取数据的数据结构 索引结构: B+Tree() Hash(不支持范围查询,精准匹配效率极高) 树的区别: 二叉树:可能产生不平衡,顺序数据可能会出现链表结构 ...

  6. 管理es索引-使用 Xput创建索引

    curl是利用URL语法在命令行方式下工作的开源文件传输工具,使用curl可以简单实现常见的get/post请求.简单的认为是可以在命令行下面访问url的一个工具.在centos的默认库里面是有cur ...

  7. mysql 添加索引 mysql 如何创建索引

    1.添加PRIMARY KEY(主键索引) mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索引 ...

  8. MySQL索引的查看创建和删除

    1.索引作用 在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率.特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍. 例如,有 ...

  9. Mysql创建索引

    1.索引作用 在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率.特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍. 例如,有 ...

随机推荐

  1. VI编辑器

  2. CUBRID学习笔记 42 Hierarchical QuerySQL层级查询

    cubrid的中sql查询语法Hierarchical QuerySQL层级查询 ------ 官方文档是英文的,看不明白可以参看ocracle的同类函数说明.很多都是一样的. ORACLE中CONN ...

  3. XPah学习

    资料1: 来源:http://www.cnblogs.com/ChengDong/archive/2012/06/28/2567744.html 示例Xml: <?xml version=&qu ...

  4. 如何读懂 STATSPACK 报告 (转) & Toad 结合

    可与 toad 相结合的内容, 用 这种颜色可以利用 toad(database->monitor->server statistics)查看到下边的很多信息, 比如 wait event ...

  5. Swift语言学习之OC和Swift混编

    本文转自http://www.helloswift.com.cn/swiftbase/2015/0112/3469.html iOS OC和Swift混编 1.创建一个swift或者oc的工程:我这里 ...

  6. SecureCRT命令行文字和背景颜色设置

    先看设置后的效果图,这是个人比较喜欢的配色(整体色调偏暗): 具体设置方法为:

  7. python的变量传递

    python中变量都被视为对象的引用.python函数调用传递参数的时候,不允许程序员选择传值还是传引用,python参数传递采用的都是“传对象引用”的方式.     这种方式相当于传值和传引用的结合 ...

  8. mysql命令行登录指定编码

    mysql --default-character-set=utf8  -uroot -p mysql --default-character-set-utf8 -uroot-p

  9. matlab灰度变彩色+白平衡算法实现

    % matlab彩色图像分离通道并合并成处理后的彩色图像(彩色变灰度再变彩色) % 白平衡算法(灰度世界法)消除RGB受光照影响 clear all; close all; %读入原始图像 srcIm ...

  10. 可视化工具之 IGV 使用方法

    整合基因组浏览器(IGV)是一种高性能的可视化工具,用来交互式地探索大型综合基因组数据.它支持各种数据类型,包括array-based的和下一代测序的数据和基因注释. IGV这个工具很牛,发了NB: ...