数据库索引<二> 如何创建索引
前面一篇说法了索引结构,和几种索引在数据表上的结构,了解了索引可以为查询服务,这篇说一说如何创建索引。
>平时可能的创建方式
这个系统中要用到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.存在统计信息这个东西。
数据库索引<二> 如何创建索引的更多相关文章
- oracle数据库什么情况下创建索引比较好
索引就好象一本字典的目录.凭借字典的目录,我们可以非常迅速的找到我们所需要的条目.数据库也是如此.凭借Oracle数据库的索引,相关语句可以迅速的定位记录的位置,而不必去定位整个表. 虽 然说,在表中 ...
- lucene全文搜索之二:创建索引器(创建IKAnalyzer分词器和索引目录管理)基于lucene5.5.3
前言: lucene全文搜索之一中讲解了lucene开发搜索服务的基本结构,本章将会讲解如何创建索引器.管理索引目录和中文分词器的使用. 包括标准分词器,IKAnalyzer分词器以及两种索引目录的创 ...
- lucene全文搜索之三:生成索引字段,创建索引文档(给索引字段加权)基于lucene5.5.3
前言:上一章中我们已经实现了索引器的创建,但是我们没有索引文档,本章将会讲解如何生成字段.创建索引文档,给字段加权以及保存文档到索引器目录 luncene5.5.3集合jar包下载地址:http:// ...
- 数据库(二)—— MySQL索引优化
目录 MySQL的索引优化 一.MySQL 5.7的初始化配置 二.MySQL配置文件 1.配置 2.配置文件作用 三.多实例 1.创建相关的目录 2.创建实例的配置文件 3.初始化 4.授权 5.启 ...
- Mysql高级操作学习笔记:索引结构、树的区别、索引优缺点、创建索引原则(我们对哪种数据创建索引)、索引分类、Sql性能分析、索引使用、索引失效、索引设计原则
Mysql高级操作 索引概述: 索引是高效获取数据的数据结构 索引结构: B+Tree() Hash(不支持范围查询,精准匹配效率极高) 树的区别: 二叉树:可能产生不平衡,顺序数据可能会出现链表结构 ...
- 管理es索引-使用 Xput创建索引
curl是利用URL语法在命令行方式下工作的开源文件传输工具,使用curl可以简单实现常见的get/post请求.简单的认为是可以在命令行下面访问url的一个工具.在centos的默认库里面是有cur ...
- mysql 添加索引 mysql 如何创建索引
1.添加PRIMARY KEY(主键索引) mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索引 ...
- MySQL索引的查看创建和删除
1.索引作用 在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率.特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍. 例如,有 ...
- Mysql创建索引
1.索引作用 在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率.特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍. 例如,有 ...
随机推荐
- ORA-01009: 必需的参数缺失
第一步:看看是否有参数没有配: 第二步:如果第一步没问题,那么请在英文半角下把sql语句重新写一遍 以上~
- oracle命令识记
连接数据库 sqlplus /nolog; conn / as sysdba; set ORACLE_SID=实例名; 查看表结构命令 select table_name from user_tabl ...
- nslookup基础用法
简单介绍 简单介绍如下: 实例:查询163.com域名信息 D:>nslookup Default Server: ns-px.online.sh.cn Address: 202.96.209. ...
- Android——android相对布局(RelativeLayout)及属性
RelativeLayout布局 android:layout_marginTop="25dip" //顶部距离 android:gravity="left" ...
- Android SDK 更新镜像服务器
搞个新的电脑,新环境下,SDK总是更新不成功.找了一下,发现有国内的镜像,记录保存一下. Android Tools Android SDK在线更新镜像服务器 中国科学院开源协会镜像站地址: ...
- JPG 批量压缩、 PNG32、PNG24转PNG 透明批量压缩工具 【JPNG】 支持多级目录
说在最前,压缩不一定是最好的,仅仅是为了方便自己工作需要.主要是手机端图片 算法说明:JPG压缩使用的是 adobe 的 JPGEncoder+ AIR的JPEGEncoderOptions (注 ...
- 详解C#委托,事件与回调函数
.Net编程中最经常用的元素,事件必然是其中之一.无论在ASP.NET还是WINFrom开发中,窗体加载(Load),绘制(Paint),初始化(Init)等等.“protected void Pag ...
- BeanUtils框架的简单运用
Sun公司的内省API过于繁琐,所以Apache组织结合很多实际开发中的应用场景开发了一套简单.易用的API操作Bean的属性——BeanUtils Beanutils工具包的常用类: •BeanUt ...
- As Easy As Possible
题目链接 题意:一个只含e, a, s, y的字符串,问[l, r]内有多少个easy序列? 题解:倍增. #include <bits/stdc++.h> using namespace ...
- Android GestureDetector方法详解
为了加强点击.拖动响应事件,Android提供了GestureDetector手势识别类.通过GestureDetector.OnGestureListener来获取当前被触发的操作手势(Single ...