精华内容
下载资源
问答
  • 数据库索引常见四种类型

    万次阅读 2019-03-19 12:53:34
    索引分四类: index ----普通的索引,数据可以重复 fulltext----全文索引,用来对大表的文本域(char,varchar,text)进行索引。语法和普通索引一样。 unique ----唯一索引,唯一...第一:index unique scan ...

    索引分四类:

    index ----普通的索引,数据可以重复

    fulltext----全文索引,用来对大表的文本域(char,varchar,text)进行索引。语法和普通索引一样。 

    unique ----唯一索引,唯一索引,要求所有记录都唯一

    primary key ----主键索引,也就是在唯一索引的基础上相应的列必须为主键

     

    第一种:index unique  scan

        索引唯一扫描,当可以优化器发现某个查询条件可以利用到主键、唯一键、具有外键约束的列,或者只是访问其中某行索引所在的数据的时候,优化器会选择这种扫描类型。

     

    第二种:index range scan

        索引范围扫描,当优化器发现在UNIQUE列上使用了大于、小于、大于等于、小于等于以及BETWEEN等就会使用范围扫描,在组合列上只使用部分进行查询,导致查询出多行数据。对非唯一的索引列上进行任何活动都会使用index range scan

     

    第三种:index full scan

        全索引扫描,如果要查询的数据可以全部从索引中获取,则使用全索引扫描。

     

    第四种:index fast full scan

        索引快速扫描,扫描索引中的全部的数据块,与全索引扫描的方式基本上类似。两者之间的明显的区别是,索引快速扫描对查询的数据不进行排序,数据返回的时候不是排序的。“在这种存取方法中,可以使用多块读功能,也可以使用并行读入,从而得到最大的吞吐量和缩短执行时间”。

    展开全文
  • 数据库的五种索引类型

    万次阅读 多人点赞 2019-03-15 21:24:13
    本文从如何建立mysql索引以及介绍mysql的索引类型,再讲mysql索引的利与弊,以及建立索引时需要注意的地方 首先:先假设一张表,表的数据10W条数据,其中一条数据是nickname='css',如果要拿这条数据的话需要些的...

    本文从如何建立mysql索引以及介绍mysql的索引类型,再讲mysql索引的利与弊,以及建立索引时需要注意的地方

    首先:先假设有一张表,表的数据有10W条数据,其中有一条数据是nickname='css',如果要拿这条数据的话需要些的sql是 SELECT * FROM award WHERE nickname = 'css'

    一般情况下,在没有建立索引的时候,mysql需要扫描全表及扫描10W条数据找这条数据,如果我在nickname上建立索引,那么mysql只需要扫描一行数据及为我们找到这条nickname='css'的数据,是不是感觉性能提升了好多咧....

    mysql的索引分为单列索引(主键索引,唯一索引,普通索引)和组合索引.

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

    组合索引:一个组合索引包含两个或两个以上的列,

    本文使用的案例的表

    CREATE TABLE `award` (
       `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',
       `aty_id` varchar(100) NOT NULL DEFAULT '' COMMENT '活动场景id',
       `nickname` varchar(12) NOT NULL DEFAULT '' COMMENT '用户昵称',
       `is_awarded` tinyint(1) NOT NULL DEFAULT 0 COMMENT '用户是否领奖',
       `award_time` int(11) NOT NULL DEFAULT 0 COMMENT '领奖时间',
       `account` varchar(12) NOT NULL DEFAULT '' COMMENT '帐号',
       `password` char(32) NOT NULL DEFAULT '' COMMENT '密码',
       `message` varchar(255) NOT NULL DEFAULT '' COMMENT '获奖信息',
       `created_time` int(11) NOT NULL DEFAULT 0 COMMENT '创建时间',
       `updated_time` int(11) NOT NULL DEFAULT 0 COMMENT '更新时间',
       PRIMARY KEY (`id`)
     ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='获奖信息表';

    复制代码

    (一)索引的创建

    1.单列索引

    1-1)    普通索引,这个是最基本的索引,

    其sql格式是 CREATE INDEX IndexName ON `TableName`(`字段名`(length)) 或者 ALTER TABLE TableName ADD INDEX IndexName(`字段名`(length))

    第一种方式 :

      CREATE INDEX account_Index ON `award`(`account`);

    第二种方式: 

    ALTER TABLE award ADD INDEX account_Index(`account`)

     

     

     

    如果是CHAR,VARCHAR,类型,length可以小于字段的实际长度,如果是BLOB和TEXT类型就必须指定长度,

    1-2)    唯一索引,与普通索引类似,但是不同的是唯一索引要求所有的类的值是唯一的,这一点和主键索引一样.但是他允许有空值,

    其sql格式是 CREATE UNIQUE INDEX IndexName ON `TableName`(`字段名`(length)); 或者 ALTER TABLE TableName ADD UNIQUE (column_list)  

    CREATE UNIQUE INDEX account_UNIQUE_Index ON `award`(`account`);

    1-3)    主键索引,不允许有空值,(在B+TREE中的InnoDB引擎中,主键索引起到了至关重要的地位)

    主键索引建立的规则是 int优于varchar,一般在建表的时候创建,最好是与表的其他字段不相关的列或者是业务不相关的列.一般会设为 int 而且是 AUTO_INCREMENT自增类型的

     

    2.组合索引

    一个表中含有多个单列索引不代表是组合索引,通俗一点讲 组合索引是:包含多个字段但是只有索引名称

    其sql格式是 CREATE INDEX IndexName On `TableName`(`字段名`(length),`字段名`(length),...);

     CREATE INDEX nickname_account_createdTime_Index ON `award`(`nickname`, `account`, `created_time`);

     

    如果你建立了 组合索引(nickname_account_createdTime_Index) 那么他实际包含的是3个索引 (nickname) (nickname,account)(nickname,account,created_time)

    在使用查询的时候遵循mysql组合索引的"最左前缀",下面我们来分析一下 什么是最左前缀:及索引where时的条件要按照建立索引的时候字段的排序方式

    1、不按索引最左列开始查询(多列索引) 例如index(‘c1’, ‘c2’, ‘c3’) where ‘c2’ = ‘aaa’ 不使用索引,where `c2` = `aaa` and `c3`=`sss` 不能使用索引

    2、查询中某个列有范围查询,则其右边的所有列都无法使用查询(多列查询)

    Where c1= ‘xxx’ and c2 like = ‘aa%’ and c3=’sss’ 改查询只会使用索引中的前两列,因为like是范围查询

    3、不能跳过某个字段来进行查询,这样利用不到索引,比如我的sql 是 

    explain select * from `award` where nickname > 'rSUQFzpkDz3R' and account = 'DYxJoqZq2rd7' and created_time = 1449567822; 那么这时候他使用不到其组合索引.

    因为我的索引是 (nickname, account, created_time),如果第一个字段出现 范围符号的查找,那么将不会用到索引,如果我是第二个或者第三个字段使用范围符号的查找,那么他会利用索引,利用的索引是(nickname),

    因为上面说了建立组合索引(nickname, account, created_time), 会出现三个索引

     

    (3)全文索引

    文本字段上(text)如果建立的是普通索引,那么只有对文本的字段内容前面的字符进行索引,其字符大小根据索引建立索引时申明的大小来规定.

    如果文本中出现多个一样的字符,而且需要查找的话,那么其条件只能是 where column lick '%xxxx%' 这样做会让索引失效

    .这个时候全文索引就起到作用了

    ALTER TABLE tablename ADD FULLTEXT(column1, column2)

    有了全文索引,就可以用SELECT查询命令去检索那些包含着一个或多个给定单词的数据记录了。

    ELECT * FROM tablename
    WHERE MATCH(column1, column2) AGAINST(‘xxx′, ‘sss′, ‘ddd′)

    这条命令将把column1和column2字段里有xxx、sss和ddd的数据记录全部查询出来。

     

    (二)索引的删除

    删除索引的mysql格式 :DORP INDEX IndexName ON `TableName`

     

    (三)使用索引的优点

    1.可以通过建立唯一索引或者主键索引,保证数据库表中每一行数据的唯一性.
    2.建立索引可以大大提高检索的数据,以及减少表的检索行数
    3.在表连接的连接条件 可以加速表与表直接的相连 
    4.在分组和排序字句进行数据检索,可以减少查询时间中 分组 和 排序时所消耗的时间(数据库的记录会重新排序)
    5.建立索引,在查询中使用索引 可以提高性能

     

    (四)使用索引的缺点

    1.在创建索引和维护索引 会耗费时间,随着数据量的增加而增加
    2.索引文件会占用物理空间,除了数据表需要占用物理空间之外,每一个索引还会占用一定的物理空间
    3.当对表的数据进行 INSERT,UPDATE,DELETE 的时候,索引也要动态的维护,这样就会降低数据的维护速度,(建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快)。

    (五)使用索引需要注意的地方

    在建立索引的时候应该考虑索引应该建立在数据库表中的某些列上面 哪一些索引需要建立,哪一些所以是多余的.
    一般来说,
    1.在经常需要搜索的列上,可以加快索引的速度
    2.主键列上可以确保列的唯一性
    3.在表与表的而连接条件上加上索引,可以加快连接查询的速度
    4.在经常需要排序(order by),分组(group by)和的distinct 列上加索引 可以加快排序查询的时间,  (单独order by 用不了索引,索引考虑加where 或加limit)
    5.在一些where 之后的 < <= > >= BETWEEN IN 以及某个情况下的like 建立字段的索引(B-TREE)

    6.like语句的 如果你对nickname字段建立了一个索引.当查询的时候的语句是 nickname lick '%ABC%' 那么这个索引讲不会起到作用.而nickname lick 'ABC%' 那么将可以用到索引

    7.索引不会包含NULL列,如果列中包含NULL值都将不会被包含在索引中,复合索引中如果有一列含有NULL值那么这个组合索引都将失效,一般需要给默认值0或者 ' '字符串

    8.使用短索引,如果你的一个字段是Char(32)或者int(32),在创建索引的时候指定前缀长度 比如前10个字符 (前提是多数值是唯一的..)那么短索引可以提高查询速度,并且可以减少磁盘的空间,也可以减少I/0操作.

    9.不要在列上进行运算,这样会使得mysql索引失效,也会进行全表扫描

    10.选择越小的数据类型越好,因为通常越小的数据类型通常在磁盘,内存,cpu,缓存中 占用的空间很少,处理起来更快

    (六)什么情况下不创建索引

    1.查询中很少使用到的列 不应该创建索引,如果建立了索引然而还会降低mysql的性能和增大了空间需求.
    2.很少数据的列也不应该建立索引,比如 一个性别字段 0或者1,在查询中,结果集的数据占了表中数据行的比例比较大,mysql需要扫描的行数很多,增加索引,并不能提高效率
    3.定义为text和image和bit数据类型的列不应该增加索引,
    4.当表的修改(UPDATE,INSERT,DELETE)操作远远大于检索(SELECT)操作时不应该创建索引,这两个操作是互斥的关系

     

     

     

    原文地址:https://www.cnblogs.com/chenshishuo/p/5030029.html

    展开全文
  • 数据库索引有几种

    千次阅读 2017-08-29 09:31:44
    https://zhidao.baidu.com/question/306752012277622484.html
    https://zhidao.baidu.com/question/306752012277622484.html
    
    展开全文
  • 数据库索引失效的几种情况

    千次阅读 2020-04-20 15:48:08
    一、什么是索引索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来...二、索引失效的几种情况 1.如果条件中多个字段使用or,即使其...

    一、什么是索引?

    索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。

    索引的一个主要目的就是加快检索表中数据,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构。

     二、索引失效的几种情况

          1.如果条件中有多个字段使用or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)。多条件查询用同一字段时使用or索引会生效。

    注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引。

      2.对于多列索引,没有使用的第一部分,则不会使用索引,建立了联合索引,没有使用联合索引中的第一个索引搜索时,就不会使用索引。

     3.like查询是以%开头

     4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引

    5、where 子句里对索引列上有数学运算,用不上索引

    6、where 子句里对有索引列使用函数,用不上索引

    7、如果mysql估计使用全表扫描要比使用索引快,则不使用索引,比如数据量极少的表。

    8、WHERE字句的查询条件里有不等于号(如:WHERE column!=...),MYSQL将无法使用索引。

     

    温馨提示:查看索引的使用情况,

    运行sql语句:show status like ‘Handler_read%'
    注意:
    handler_read_key:这个值越高越好,越高表示使用索引查询到的次数。
    handler_read_rnd_next:这个值越高,说明查询低效。

     

    三、什么情况下不推荐使用索引?

    1) 数据唯一性差(一个字段的取值只有几种时)的字段不要使用索引

    比如性别,只有两种可能数据。意味着索引的二叉树级别少,多是平级。这样的二叉树查找无异于全表扫描。

    2) 频繁更新的字段不要使用索引

    比如logincount登录次数,频繁变化导致索引也频繁变化,增大数据库工作量,降低效率。

    3) 字段不在where语句出现时不要添加索引,如果where后含IS NULL /IS NOT NULL/ like ‘%输入符%’等条件,不建议使用索引

    只有在where语句出现,mysql才会去使用索引

    4) where 子句里对索引列使用不等于符号 “<>”,使用索引效果一般

     

    四、总结

    索引失效的几种情况:

    1.sql多条件查询语句中带有 or,并且多个字段都没有索引;
    2.复合索引未用左列字段;
    3.like以%开头;
    4.字符串字段的值没加引号“”;
    5.where中索引列有加减乘除运算;
    6.where中索引列使用了函数运算;
    7.如果mysql觉得全表扫描更快时(数据少);

    8.where字句的查询条件里有不等于号(如:WHERE column!=...),MYSQL将无法使用索引;

     

    不推荐使用索引的几种情况:

    1.数据唯一性差,一个字段的取值只有几种时;
    2.频繁更新的字段不用;
    3.where中不用的字段;
    4.索引使用不等于符号 “<>” 或 “!=” 时,效果一般;

     

     

     

    展开全文
  • 造成数据库索引失效的几种原因

    千次阅读 2011-09-13 17:26:47
    操作数据库索引能起到优化数据库查询,提高查询效率的作用。并且对也稍微大一点的数据量的服务来说,索引的创建是必须的,也是关键的。但是索引也要合理应用,不要遇到查询就建索引,也不能乱建。如果造成索引失效那...
  • 以下的文章主要介绍的是MySQL数据库索引类型,其中包括普通索引,唯一索引,主键索引与主键索引,以及对这些索引的实际应用或是创建一个详细介绍,以下就是文章的主要内容描述。 (1)普通索引 这是最基本的...
  • 数据库创建索引几种方法

    万次阅读 多人点赞 2018-11-09 10:46:26
    1、普通索引  CREATE INDEX indexName ON mytable(username(length));  创建表的时候直接指定:  CREATE TABLE mytable(  ID INT NOT NULL,   username VARCHAR(16) NOT NULL,   INDEX [indexName] (.....
  • 数据库几种索引

    千次阅读 2017-12-09 22:06:58
    (1)按照索引列值的唯一性,索引可分为唯一索引和非唯一索引 ①非唯一索引:B树索引 create index 索引名 on 表名(列名) tablespace 表空间名; ②唯一索引:建立主键或者唯一约束时会自动在对应的列上建立唯一索引 ...
  • 数据库备份的几种类型

    千次阅读 2017-07-19 10:29:29
    这可能是大多数人常用的方式,它可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。但是呢,它也需要花费更多的时间和空间,所以,一般推荐一周做一次完全备份。 2、事务日志备份 ...
  • MYSQL数据库种索引类型介绍

    千次阅读 多人点赞 2020-04-20 18:24:46
    MYSQL数据库种索引类型 主键索引: 主键是一唯一性索引,但它必须指定为PRIMARY KEY,每个表只能一个主键。 唯一索引: 索引列的所有值都只能出现一次,即必须唯一,值可以为空。 普通索引 : 基本的...
  • 数据库锁的几种类型

    千次阅读 2018-03-21 12:13:57
    1 前言数据库大并发操作要考虑死锁和锁的性能问题。看到网上大多语焉不详(尤其更新锁),所以这里做个简明解释,为下面描述方便,这里用T1代表一个数据库执行请求,T2代表另一个请求,也可以理解为T1为一个线程,T2...
  • 数据库索引类型及实现方式

    万次阅读 2017-07-12 18:43:23
    数据库索引类型及实现方式 1、索引定义  数据库索引好比是一本书前面的目录,能加快数据库的查询速度。索引是对数据库表中一个或多个列(例如,employee 表的姓氏 (lname) 列)的值进行排序的结构。如果想...
  • MYSQL数据库种索引类型的简单使用

    万次阅读 2017-09-18 13:38:09
    MYSQL数据库索引类型包括普通索引,唯一索引,主键索引与主键...它以下几种创建方式: 创建索引 CREATE INDEX indexName ON mytable(username(length));  如果是CHAR,VARCHAR类型,length可以小于字段实际
  • 数据库索引

    千次阅读 2016-07-11 18:13:55
    数据库索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地
  • 数据库索引是什么 什么优缺点

    千次阅读 2018-12-14 11:05:57
    索引的几种类型分别是普通索引、唯一索引、聚集索引、主键索引、全文索引几种。 使用索引的优点就是: 提高数据的搜索速度 加快表与表之间的连接速度 在信息检索过程中,若使用分组及排序子句进行时,通过建立...
  • Mysql索引有几种类型

    万次阅读 2019-02-27 10:35:15
    索引是一数据库中单列或者多列的值进行排序的结构。应用索引可以大幅度提高查询的速度。 用户通过索引查询数据,不但可以提高查询速度,也可以降低服务器的负载。用户查询数据时,系统可以不必遍历表中的所有...
  • 索引的几种类型分别是普通索引、唯一索引、聚集索引、主键索引、全文索引几种。 使用索引的优点: 提高数据的搜索速度 加快表与表之间的连接速度 在信息检索过程中,若使用分组及排序子句进行时,通过建立索引能...
  • 1.什么是索引?为什么要用索引? 1.1索引的含义 1.2为什么用? 2.索引的作用与缺点 2.1作用 2.2缺点 3.索引的使用场景 3.1应创建索引的场景 3.2不应创建索引的场景 4.索引的分类与说明 4.1主键索引 ...
  • 以下几种情况就会导致索引失效: 1. 没有 WHERE 子句 众所周知,添加索引的字段必需要在where条件后适当使用才会生效,如果连查询条件都没有,那肯定不会用到索引的。 2. 使用 IS NULL 和 IS NOT NULL select ...
  • Oracle数据库涉及的几种类型的用户

    千次阅读 2013-01-03 21:57:17
    Oracle数据库用户可以分为六种类型,即数据库管理员、安全员、网络管理员、应用程序开发员、应用程序管理员以及数据库用户。 1、数据库管理员 每个数据库都至少一个数据库管理员。Oracle数据库系统可能非常的...
  • MySQL数据库有几种索引?分别是什么?

    千次阅读 2019-06-13 16:52:00
    5种索引 1.主键索引 2.唯一索引 3.普通索引 4.全文索引 5.联合索引 转载于:https://www.cnblogs.com/djj123/p/11017609.html
  • 索引的数据结构分析,数据库面试到索引最常见的问题分析,我总结了一下。
  • MySQL数据库索引

    万次阅读 多人点赞 2018-09-23 09:31:41
    数据库有哪些索引 唯一索引 聚簇索引与非聚簇索引 全文索引 使用索引一定能提高查询性能吗? 哪些情况下设置了索引但是无法使用 哪些情况下需要设置索引、哪些情况下不需要 什么情况下应该使用组合索引而非...
  • 唯一索引/非唯一索引主键索引(主索引)聚集索引/非聚集索引组合索引唯一索引/非唯一索引唯一索引1.唯一索引是在表上一个或者多个字段组合建立的索引,这个或者这些字段的值组合起来在表中不可以重复。非唯一索引2....
  • 数据库 索引类型及其区别

    千次阅读 2017-02-14 21:21:52
    Single column 单行索引 Concatenated 多行索引 Unique 唯一索引 NonUnique 非唯一索引 Function-based函数索引 Domain 域索引 物理上: Partitioned 分区索引 NonPartitioned 非分区索引 B-tree: Normal...
  • mysql进阶(二十七)数据库索引原理

    万次阅读 2016-10-13 20:20:38
    mysql进阶(二十七)数据库索引原理前言  本文主要是阐述MySQL索引机制,主要是说明存储引擎Innodb。   第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础。   第二部分结合MySQL数据库中...
  • 索引分为主键索引、唯一索引、普通索引、聚集索引、全文索引几种,而索引其实就是在无序的数据中建立索引,每次查询可以根据索引迅速查到我们想要的数据(就像字典的目录a-z一样) 优点 提高数据查找速度 提高...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 306,531
精华内容 122,612
关键字:

数据库索引有几种类型