精华内容
下载资源
问答
  • 索引分类
    万次阅读
    2019-05-10 14:35:23

    (1)、主键索引

    设定为主键后数据库会自动建立索引,innodb为聚簇索引

    语法:

    #随表一起建索引:
    CREATE TABLE customer (id INT(10) UNSIGNED  AUTO_INCREMENT ,customer_no VARCHAR(200),customer_name VARCHAR(200),
      PRIMARY KEY(id) 
    );
    #使用AUTO_INCREMENT关键字的列必须有索引(只要有索引就行)。
    CREATE TABLE customer2 (id INT(10) UNSIGNED,customer_no VARCHAR(200),customer_name VARCHAR(200),
      PRIMARY KEY(id) 
    );
    #单独建主键索引:
    ALTER TABLE customer add PRIMARY KEY customer(customer_no);  
    #删除建主键索引:
    ALTER TABLE customer drop PRIMARY KEY ;  
    #修改建主键索引:
    #必须先删除掉(drop)原索引,再新建(add)索引

    (2)、单值索引

    即一个索引只包含单个列,一个表可以有多个单列索引

    语法:

    #随表一起建索引:
    CREATE TABLE customer (id INT(10) UNSIGNED  AUTO_INCREMENT ,customer_no VARCHAR(200),customer_name VARCHAR(200),
      PRIMARY KEY(id),
      KEY (customer_name)  
    );
    #随表一起建立的索引 索引名同 列名(customer_name)
    #单独建单值索引:
    CREATE INDEX idx_customer_name ON customer(customer_name); 
    #删除索引:
    DROP INDEX idx_customer_name ;

    (3)、唯一索引

    索引列的值必须唯一,但允许有空值

    #随表一起建索引:
    CREATE TABLE customer (id INT(10) UNSIGNED  AUTO_INCREMENT ,customer_no VARCHAR(200),customer_name VARCHAR(200),
      PRIMARY KEY(id),
      KEY (customer_name),
      UNIQUE (customer_no)
    );
    #建立 唯一索引时必须保证所有的值是唯一的(除了null),若有重复数据,会报错。   
    #单独建唯一索引:
    CREATE UNIQUE INDEX idx_customer_no ON customer(customer_no); 
    #删除索引:
    DROP INDEX idx_customer_no on customer ;

    (3)、复合索引

    即一个索引包含多个列

    在数据库操作期间,复合索引比单值索引所需要的开销更小(对于相同的多个列建索引)

    当表的行数远大于索引列的数目时可以使用复合索引

    语法:

    #随表一起建索引:
    CREATE TABLE customer (id INT(10) UNSIGNED  AUTO_INCREMENT ,customer_no VARCHAR(200),customer_name VARCHAR(200),
      PRIMARY KEY(id),
      KEY (customer_name),
      UNIQUE (customer_name),
      KEY (customer_no,customer_name)
    );
    #单独建索引:
    CREATE INDEX idx_no_name ON customer(customer_no,customer_name); 
    #删除索引:
    DROP INDEX idx_no_name  on customer ;

    (4)、基本语法

    创建:ALTER mytable ADD  [UNIQUE ]  INDEX [indexName] ON (columnname(length))

    删除:DROP INDEX [indexName] ON mytable;

    查看:SHOW INDEX FROM table_name\G

    有四种方式来添加数据表的索引:

    ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。

    ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。

    ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出现多次。

    ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):该语句指定了索引为 FULLTEXT ,用于全文索引。

    (5)、哪些情况需要创建索引

    主键自动建立唯一索引

    频繁作为查询条件的字段应该创建索引(where 后面的语句)

    查询中与其它表关联的字段,外键关系建立索引

    单键/组合索引的选择问题,who?(在高并发下倾向创建组合索引)

    查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度

    查询中统计或者分组字段

    (6)、哪些情况不要创建索引

    表记录太少

    经常增删改的表:提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。 因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件

    Where条件里用不到的字段不创建索引

    数据重复且分布平均的表字段,因此应该只为最经常查询和最经常排序的数据列建立索引,某个数据列包含许多重复的内容,建立索引没有太大实际效果。

    更多相关内容
  • 一、 MySQL: 索引以B树格式保存 Memory存储引擎可以选择Hash或BTree索引,Hash索引只能用于=或<=>的等式比较。 1、普通索引:create index on Tablename(列的列表) alter table TableName add index (列的列表) ...
  • mysql之索引分类

    2022-04-03 21:17:10
    主键索引:针对于表中主键创建的索引,默认自动创建,只能有一个,primary。 唯一索引:避免同一个表中某数据列中的值重复,可以有多个,unique。当你为某个字段创建唯一约束时,会自动创建唯一索引。 常规索引:...

    主键索引:针对于表中主键创建的索引,默认自动创建,只能有一个,primary。
    唯一索引:避免同一个表中某数据列中的值重复,可以有多个,unique。当你为某个字段创建唯一约束时,会自动创建唯一索引。
    常规索引:快速定位特定数据,可以有多个。
    全文索引:查找的是文本中的关键字,而不是比较索引中的值,可以有多个。fulltext

    在innodb中,根据索引的存储形式,又可以分为以下两种(换句话说,要么是聚集索引,要么是二级索引):

    聚集索引: 将数据存储与索引放到一块,索引结构的叶子节点保存了行数据,必须有且只有一个。
    二级索引: 将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键,可以存在多个。
    注意,一定会有聚集索引
    1.默认主键为聚集索引
    2.如果不存在主键,将使用第一个唯一(unique)索引作为聚集索引;
    3.上述都没有,则innodb会自动生成一个rowid作为隐藏的聚集索引。

    大大大的大
    回表查询

    是指先根据二级索引查到键值,然后通过键值回表查询聚集索引,从而获取行(row)数据。

    在这里插入图片描述

    展开全文
  • Oracle中的索引分类

    千次阅读 2021-05-01 06:00:22
    Oracle中的索引分类(2012-05-01 08:12:24)标签:索引b树位图创建检索功能杂谈Oracle中可以创建多种类型的索引,以适应各种表的特点和各种查询条件的特点;可以按列的多少,索引列是否唯一、索引数据的组织形式对索引...

    Oracle中的索引分类

    (2012-05-01 08:12:24)

    标签:

    索引

    b树

    位图

    创建

    检索功能

    杂谈

    Oracle中可以创建多种类型的索引,以适应各种表的特点和各种查询条件的特点;可以按列的多少,索引列是否唯一、索引数据的组织形式对索引进行分类。

    1.单列索引与复合索引

    一个索引可以由一个或多个列组成,用来创建索引的列被称为“索引列”。

    单列索引是基于单列所创建的索引,复合索引是基于两列或者多列所创建的索引。

    2.唯一索引与非唯一索引

    唯一索引是索引列值不能重复的索引,非唯一索引是索引列可以重复的索引。

    无论是唯一索引还是非唯一索引,索引列都允许取NULL值。默认情况下,Oracle创建的索引是不唯一索引。

    3.B树索引

    B树索引是按B树算法组织并存放索引数据的,所以B树索引主要依赖其组织并存放索引数据的算法来实现快速检索功能。

    4.位图索引

    位图索引在多列查询时,可以对两个列上的位图进行AND和OR操作,达到更好的查询效果。

    5.函数索引

    Oracle中不仅能够直接对表中的列创建索引,还可以对包含列的函数或表达式创建索引,这种索引称为“位图索引”。

    分享:

    a4c26d1e5885305701be709a3d33442f.png喜欢

    0

    a4c26d1e5885305701be709a3d33442f.png赠金笔

    加载中,请稍候......

    评论加载中,请稍候...

    发评论

    登录名: 密码: 找回密码 注册记住登录状态

    昵   称:

    评论并转载此博文

    a4c26d1e5885305701be709a3d33442f.png

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

    展开全文
  • MySQL的索引分类及创建原则

    千次阅读 2022-03-19 16:05:58
    一、索引分类。 ​ 编辑 切换为居中 添加图片注释,不超过 140 字(可选) 普通索引:添加普通的索引不会对原来的列产生任何影响,该索引只用来提高查询效率(该列是否非空,是否唯一由列本身的约束条件约束)。 ...


    原文:

    MySQL的索引分类及创建原则

    一、索引分类。

    在这里插入图片描述

    1、普通索引:

    添加普通的索引不会对原来的列产生任何影响,该索引只用来提高查询效率(该列是否非空,是否唯一由列本身的约束条件约束)。

    2、唯一索引:

    添加唯一索引的列不允许出现重复值,否则报错,但允许有空值(一个表可以有多个唯一索引)。

    3、主键索引:

    一种添加了非空限制的特殊唯一索引,因为数据存储在文件中只能按一种顺序存储,所以一张表中只允许有一个主键索引。

    4、单列索引:

    可以是前面三种索引,只要保证该索引对应的是单一列即可,一个表中可以有多个单列索引。

    5、联合索引:

    由表中的多个列共同构成,遵循最左前缀原则。比如建立联合索引(dept_id,name,score)只有使用到dept_id字段才可能使用name字段、score字段。 下面举个例子: 在某员工表中,建立了(dept_id,name,score)的联合索引。 目标:需要查找dept_id=1,name=a的员工。 只有使用了索引的dept_id字段,才能找到所有的dept_id=1的员工,只有在这基础上再使用name字段才能正确找到dept_id=1,name=a的员工;如果一上来就找name=a的员工,使用的就不是这个联合索引了(可能是name字段的单列索引)。 下面给出一种使用联合索引所有字段的情况:查找dept_id=1,name=b,score=3的员工。 先通过dept_id字段找到所有dept_id=1的员工,在此基础上,再通过name字段找到dept_id=1,name=b的所有员工,在此基础上,再通过score字段找到目标。(在这个过程中,只有左边的索引字段被用到了,右边的索引字段才可能被用到)

    在这里插入图片描述

    二、索引的创建原则。

    1、字段的数值有唯一性限制。

    索引本身可以起到约束的作用,若表中的某一列是需要唯一约束的,可以直接给它建立唯一索引或者主键索引。这样不仅可以达到约束的目的,还可以通过该索引更快速地确定某条记录。

    2、频繁作为WHERE查询条件的字段。

    索引的作用就是在一定程度上提高查询效率的,当WHERE语句频繁使用某字段的时候,说明要以该列为标准对表数据进行处理,为了提高效率,我们应该为其创建索引,哪怕是普通索引,所能提升的效率也是非常显著的。

    3、经常使用GROUP BY和ORDER BY的列。

    根据待排序字段的数量来确定建立单列索引或者联合索引。

    4、 根据待排序字段的数量来确定建立单列索引或者联合索引。

    索引加快了WHERE的筛选速率,若UPDATE/DELETE的字段是非索引字段的话,效率提升得更为明显,因为非索引字段的更新或删除不涉及到索引的维护。

    5、DISTINCT字段。

    索引会将数据按一定顺序排列,相同的数据都是紧挨着的,这时候再去重,效率当然高。

    6、多表JOIN建立索引及注意事项。

    (1)连接的表数量不超过3。
    (2)对WHERE创建索引,WHERE是用来过滤数据的,特别是在记录很多的情况下,WHERE没有索引是一件很糟糕的事情。
    (3)对连接字段创建索引,并且该字段在多表的类型必须一致(这里并不是说不一致不能得到结果,只是性能会很差,涉及到了类型转换。特别是在记录很多的情况下)。

    7、使用类型小的列建立索引。

    类型小指的是数据范围小,数据范围小有两个好处:一、查询时,比较操作快;二、占用的存储空间少。

    8、使用字符串的前缀创建索引。

    比如某字段类型为name VARCHAR(255),那我们可以选择name(10)建立索引。这样既节约空间,又节省字符串的比较时间。

    9、区分度高(散列性高)的列适合做索引。

    其实就是选低重复、少重复的列,比如gender列就不适用建立索引(不是男就是女)

    10、使用最频繁的列放到联合索引的最左边。

    联合索引遵循最左前缀原则。

    11、在多字段都需要建立索引的情况下,联合索引优于单列索引。

    三、为什么要限制索引的数目。

    索引并不是越多越好的!!!
    索引需占用

    1. 磁盘空间,索引越多,需要的磁盘空间就越大。
    2. 索引会影响INSERT、UPDATE、DELETE等语句的性能,而且在数据修改的同时,索引也需要进行维护,从而产生一定的负担。
    3. 优化器在选择如何优化查询的时候会对比各个索引,从中挑选一个最优的方案,索引过多,会加剧优化器的工作时间,从而降低查询性能。

    四、为什么要限制索引的数目。

    1、WHERE使用不到的字段。 索引的价值是快速定位,如何起不到定位作用的字段一般是不需要建立索引的。
    2、数量少的表格。 索引维护也需要时间。
    3、有大量重复数据的列。 比如gender列就不适用建立索引(不是男就是女)
    4、避免对经常更新的表创建过多的索引。
    5、不建议用无序值做索引。 无序数据可能导致多次中间插入,严重加剧了索引维护的成本。(比如在数列中间插入数据,是需要将其他数据移动的,数据量越大,成本越高)
    6、删除不再使用或者很少使用的索引。
    7、不要定义冗余或重复的索引。

    展开全文
  • 数据库索引分类

    2020-12-14 16:19:04
    什么是数据库索引? 我们再平时的开发中免不了用到数据库的索引,接下来就简单说一下数据库索引。 数据库索引用来干什么? 数据库索引就是为了提高数据的查询速率。 数据库索引有哪些? 聚集索引:在数据库中,所有...
  • MySQL索引分类及相关概念辨析.doc
  • MYSQL索引分类介绍

    千次阅读 2017-08-02 20:38:45
    1、B+树索引 2、hash索引 3、FULLTEXT索引(InnoDB引擎5.7以后支持) 4、R-Tree索引(用于对GIS数据类型创建SPATIAL索引) 问题:这些索引的区别跟用途在哪?B+树相比hash的优点在哪? 从物理存储角度 1、聚簇索引...
  • oracle索引分类

    2019-12-04 14:06:01
    在关系数据库中,每一行... (一)索引按存储方法分类,可以分为2类:B*树索引和位图索引。  (1)B*树索引的存储结构类似书的索引结构,有分支和叶两种类型的存储数据块,分支块相当于书的大目录,叶块相当于索引...
  • 7.1 什么是索引 索引(index)是帮助MySQL高效获取数据的数据结构(有序) 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级...
  • 于是会产生索引索引索引索引索引索引... OLAP:对历史数据的分析,比如Hive OLTP:关系型数据库都是OLTP,要求在最短时间内返回最终结果 为什么选择B+树? MySQL B+ 树的根节点、叶子结点都存储与磁盘中。...
  • 从不同的视角给相同的索引创建了五花八门的名字,理解分类的视角有助于记忆索引。 1、根据索引中存储的内容非为聚集索引和非聚集索引(二级索引) a)聚集索引:叶子节点中存储的是数据所在行全部数据的物理地址,一...
  • 一、数据索引分类 1、按表列属性分类 单列索引(主键索引,唯一索引,普通索引)和多列索引(组合索引),全文索引 主键索引 唯一索引 普通索引 多列索引 全文索引 2、按数据结构分类 1) B+tree索引 b+tree基于...
  • 之前的一篇《MySQL索引...索引分类 从数据结构角度可分为B+树索引、哈希索引、以及全文(FULLTEXT)索引(现在MyISAM和InnoDB引擎都支持)和R-Tree索引(用于对GIS数据类型创建SPATIAL索引); 从物理存储角度可分为聚
  • oracle 索引类型

    2019-04-20 01:04:19
    NULL 博文链接:https://stevenfeng.iteye.com/blog/1884088
  • 索引分类

    千次阅读 2012-11-14 14:32:37
    索引分类 逻辑上:  Single column 单行索引  Concatenated 多行索引  Unique 唯一索引  NonUnique 非唯一索引  Function-based函数索引  Domain 域索引 物理上:  Partitioned 分区索引  ...
  • 索引分类: 1.主键索引:针对表主键创建的索引 特点:默认自动创建,只有一个 关键字:primary 2.唯一索引:避免同一个表中某数据列中的值重复 特点:多个 关键字:unique 3.常规索引:快速定位特定数据 ...
  • 各种树的应用场景 AVL树: 最早的平衡二叉树之一。应用相对其他数据结构比较少。windows对进程地址空间的管理用到了AVL树。 红黑树: 平衡二叉树,广泛用在C++的...索引分类 1, 全文索引 2, 哈希索引 3, b+树索引 ...
  • MySQL 索引分类mysql的索引主要分为3类:1.单值索引2.唯一索引3.复合索引(联合索引) mysql的索引主要分为3类: 1.单列索引 2.联合索引(复合索引) 3.唯一索引 -----------------------------------------------------...
  • 在InnoDB中索引分为好几种类型,下面我们一起来看一种常见的索引类型吧。
  • 索引分类

    千次阅读 2020-12-21 17:52:04
    索引分类索引分为四类索引在MySQL中的分类B树B+树聚集索引和非聚集索引Hash索引MySQL中InnoDB和MyISAM的区别MySQL中存在索引但是不被使用的情况 索引是在存储引擎中实现的,不同的存储引擎会使用不同的索引。 ...
  • Python数据索引分类

    万次阅读 2021-02-03 13:04:51
    方式1:布尔索引 + 普通索引选择指定的行和列 方式2:切片索引 + 切片索引选择指定的行和列 方式3:切片索引 + 普通索引选择指定的行和列 方式4:位置索引 + 位置索引选择指定行和列 方式5:普通索引 + 普通索引...
  • Oracle索引分类

    千次阅读 2021-11-28 18:59:09
    索引唯一性扫描(index unique scan) ❑ 索引范围性扫描(index range scan) ❑ 全索引扫描(index full scan) ❑ 全索引快速扫描(index fast full scan)
  • HBase下的高效时空分类索引
  • 索引的类型及分类总结

    千次阅读 2020-06-20 20:56:46
    一、索引的方法 Mysql目前主要有一下几种索引:FULLTEXT、HASH、BTREE、RTREE 1、FULLTEXT 即为全文索引,目前只有MyISAM引擎支持。其可以在create table,alter table,create index使用,不过目前只有char,...
  • MySQL 索引分类和适用场景

    千次阅读 2018-09-20 11:12:22
    一、 MySQL: 索引以B树格式保存 Memory存储引擎可以选择Hash或BTree索引,Hash索引只能用于=或&lt;=&gt;的等式比较。 1、普通索引:create index on Tablename(列的列表) alter table TableName add ...
  • 索引分类和例子

    千次阅读 2015-07-03 09:52:31
    Single column 单行索引 Concatenated 多行索引 Unique 唯一索引 NonUnique 非唯一索引 Function-based函数索引 Domain 域索引 物理上: Partitioned 分区索引 NonPartitioned 非分区索引 B-tree: ...
  • MySQL索引都有哪些分类? 按数据结构分类可分为:B+tree索引、Hash索引、Full-text索引。 按物理存储分类可分为:聚簇索引、二级索引(辅助索引)。 按字段特性分类可分为:主键索引、普通索引、前缀索引。 按字段个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 289,216
精华内容 115,686
关键字:

索引分类