mysql 建复合索引_关于mysql建立索引 复合索引 索引类型
这两天有个非常强烈的感觉就是自己在一些特别的情况下还是hold不住,脑子easy放空或者说一下子不知道怎么去分析问题了,比方,问“hash和btree索引的差别”,这非常难吗。仅仅要掌握了这两种数据结构稍加分析就能得出答案,结果是一下子不知道从何说起。进入正题吧。这两者有啥差别。
1. hash索引查找数据基本上能一次定位数据。当然有大量碰撞的话性能也会下降。
而btree索引就得在节点上挨着查找了,非常明显在数据精确查找方面hash索引的效率是要高于btree的。
2. 那么不精确查找呢,也非常明显,由于hash算法是基于等值计算的。所以对于“like”等范围查找hash索引无效,不支持;
3. 对于btree支持的联合索引的最优前缀。hash也是无法支持的。联合索引中的字段要么全用要么全不用。提起最优前缀竟然都泛起迷糊了,看来有时候放空得太厉害。
4. hash不支持索引排序。索引值和计算出来的hash值大小并不一定一致。
勤动脑,少放空。
索引是在数据库表或者视图上创建的对象,目的是为了加快对表或视图的查询的速度。
依照存储方式分为:聚集与非聚集索引
依照维护与管理索引角度分为:唯一索引、复合索引和系统自己主动创建的索引。
索引的结构是由:根节点--->非叶节点--->非叶节点--->叶节点
1、聚集索引:表中存储的数据依照索引的顺序存储,检索效率比普通索引高,但对数据新增/改动/删除的影响比較大。
逻辑顺序决定了表中对应行的物理顺序。
特点:
(1) 一个表能够最多能够创建249个索引
(2) 先建聚集索引才干创建非聚集索引
(3) 非聚集索引数据与索引不同序
(4) 数据与索引在不同位置
(5) 索引在叶节点上存储,在叶节点上有一个"指针"直接指向要查询的数据区域
(6) 数据不会依据索引键的顺序又一次排列数据
(7)假设在该字段上进行范围查询,或者该表非常少做增删改
创建聚集索引的语法:
create NONCLUSTERED INDEX idximpID ON EMP(empID)
2、非聚集索引:不影响表中的数据存储顺序,检索效率比聚集索引低,对数据新增/改动/删除的影响非常少
。
是通过二叉树的数据结构来描写叙述的,逻辑顺序,特点:
(1) 无索引。数据无序
(2) 有索引。数据与索引同序
(3) 数据会依据索引键的顺序又一次排列数据
(4) 一个表仅仅能有一个索引
(5) 叶节点的指针指向的数据也在同一位置存储
语法:
create CLUSTERED INDEX idxempID on emp(empID)
3、惟一索引:惟一索引能够确保索引列不包括反复的值.
能够用多个列,可是索引能够确保索引列中每一个值组合都是唯一的
姓 名
李 二
张 三
王 五
语法: create unique index idxempid on emp(姓,名)
4、复合索引:假设在两上以上的列上创建一个索引,则称为复合索引。
那么。不可能有两行的姓和名是反复的
语法:
create index indxfullname on addressbook(firstname,lastname)
注意:假设把复合的聚集索引字段分开查询。
带着这个问题。我们来看一下下面的查询速度(结果集都是25万条数据):(日期列fariqi首先排在复合聚集索引的起始列。usernameneibuyonghu排在后列):
(1)select gid,fariqi,neibuyonghu,title from Tgongwen where fariqi>''2004-5-5''
查询速度:2513毫秒
(2)select gid,fariqi,neibuyonghu,title from Tgongwen where fariqi>''2004-5-5'' and neibuyonghu=''办公室''
查询速度:2516毫秒
(3)select gid,fariqi,neibuyonghu,title from Tgongwen where neibuyonghu=''办公室''
查询速度:60280毫秒
从以上试验中,我们能够看到假设仅用聚集索引的起始列作为查询条件和同一时候用到复合聚集索引的所有列的查询速度是差点儿一样的。甚至比用上所有的复合索引列还要略快(在查询结果集数目一样的情况下);而假设仅用复合聚集索引的非起始列作为查询条件的话,这个索引是不起不论什么作用的。当然,语句1、2的查询速度一样是由于查询的条目数一样。假设复合索引的所有列都用上,并且查询结果少的话,这样就会形成“索引覆盖”。因而性能能够达到最优。同一时候,请记住:不管您是否常常使用聚合索引的其它列,但其前导列一定要是使用最频繁的列。
5、系统自建的索引:在使用T_sql语句创建表的时候使用PRIMARY KEY或UNIQUE约束时。会在表上自己主动创建一个惟一索引
自己主动创建的索引是无法删除的
语法:
create table ABc
( empID int primary key,
firstname varchar(50)UNIQUE,
lastname varchar(50)UNIQUE,
)
这种结果就出来了三个索引,但仅仅有一个聚集索引哦
6、创建索引的方法:
1、企业管理器中
(1)右击某个表,全部任务---管理索引,打开管理索引。单击“新建”就能够创建索引
(2)在设计表中进行设计表,管理索引/键
(3)在关系图中,加入表后右击关系图中的某个表,就有“索引/键”
(4)通过向导,数据库---创建索引向导
(5)通过T-SQL语句
2、能过“索引优化向导”来优化索引的向导。通过它能够决定选择哪些列做为索引列
二、何时使用聚集索引或非聚集索引
以下的表总结了何时使用聚集索引或非聚集索引(非常重要):
动作描写叙述
使用聚集索引
使用非聚集索引
列常常被分组排序
应
应
返回某范围内的数据
应
不应
一个或极少不同值
不应
不应
小数目的不同值
应
不应
大数目的不同值
不应
应
频繁更新的列
不应
应
外键列
应
应
主键列
应
应
频繁改动索引列
不应
应
mysql 建复合索引_关于mysql建立索引 复合索引 索引类型相关推荐
- mysql建表测试_总结MySQL建表、查询优化实用小技巧
MySQL建表阶段是非常重要的一个环节,表结构的好坏.优劣直接影响着后续的管理维护,赶在明天上班前分享总结个人MySQL建表.MySQL查询优化积累的一些实用小技巧. 技巧一.数据表冗余记录添加时间与 ...
- mysql = 索引_深入MySQL索引
MySQL索引作为数据库优化的常用手段之一在项目优化中经常会被用到, 但是如何建立高效索引,有效的使用索引以及索引优化的背后到底是什么原理?这次我们深入数据库索引,从索引的数据结构开始说起. 索引原理 ...
- 数据库mysql建立索引_为mysql数据库建立索引
前些时候,一位颇高级的程序员居然问我什么叫做索引,令我感到十分的惊奇,我想这绝不会是沧海一粟,因为有成千上万的开发者(可能大部分是使用MySQL的)都没有受过有关数据库的正规培训,尽管他们都为客户做过 ...
- mysql建立学号与课程编号的索引_数据库mysql 四约束 三范式 六索引
mysql 四约束 三范式 六索引 1.MySQL 约束 1.约束的作用 分类 表列的primary key主键,unique唯一键,not null非空等修饰符常常被称作约束(constraint) ...
- mysql explain详解_数据库mysql(1)——B+TREE索引原理
一.B+Tree索引详解 1.什么是索引? 索引:加速查询的数据结构. 2.索引常见数据结构: #1.顺序查找: 最基本的查询算法-复杂度O(n),大数据量此算法效率糟糕. #2.二叉树查找(bina ...
- mysql为什么使用b 树作为索引_为什么Mysql用B+树作为索引
该篇文章已经投稿给公众号hollis 1.什么是索引 索引这个词,相信大多数人已经相当熟悉了.不过为了文章的完整性,这里再啰嗦一下.索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的 ...
- 覆盖索引与联合索引_浅析MySQL的索引覆盖和索引下推
写在前面 在MySQL数据库中,索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点,索引就是为了提高数据查询的效率.今天我们来聊聊在MySQL索引优化中两种常见的方式,索引覆盖和 ...
- mysql memory 索引_理解MySQL——索引与优化
索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录.如果没有索引,查询将对整个表进 ...
- mysql to days 索引_高性能mysql优化二之索引篇
前言 为什么要使用索引?索引有什么用途呢?我的亲身经历,一个几千万数据的项目,我写了一条查询,没有用到索引,由于访问量比较大,瞬间网站就跪了,从此以后我写的每一条sql都会explain解析看是否用到 ...
最新文章
- mysql减少锁等待_降低锁竞争 减少MySQL用户等待时间
- Netty ObjectPool对象池技术原理分析
- c# list 自定义排序
- 流程流转相关业务与流转的分离
- 呆错网址导航系统V1.13.18 PHP源码
- JavaScript常用工具Date对象和Math介绍介绍
- 遗传算法入门到掌握(二)
- 【树状数组】Bzoj1878[SDOI2009] HH的项链
- Linux文件系统之:通用块处理层 ll_rw_block | +往期文章回顾
- latex生成pdf中文标签乱码pdf复制乱码
- 计算机系和清华大学,清华大学交叉信息研究院和计算机系区别
- 解决 ModuleNotFoundError: No module named ‘PySide2.QtUiTools‘
- 菲尼克斯馈电隔离器 - MINI MCR-SL-RPS-I-I
- LimeSDR系列产品介绍(一):板卡级(Board Level)产品
- 图解格拉姆-施密特正交化和改进的格拉姆-施密特正交化
- 计算机二级office考试题库操作题,计算机二级考试MSOffice考试题库ppt操作题附答案...
- github不再通过验证密码方式push代码
- nas linux手机照片备份,本身着手,组建简洁好用的NAS!(存储同步篇)
- 基于AS的学生教务系统
- 网管型工业交换机冗余功能介绍