索引用来快速地寻找那些具有特定值的记录,所有的MySQL索引都以B-树的形式保存。如果没有索引,执行查询的时候MySQL必须从第一个记录开始扫描整个表中的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录既可迅速得到目标记录所有在位置。如果表有1000个记录,通过索引查找记录至少比顺序扫描记录快100倍。

索引的类型

MySQL提供多种索引类型供选择:

普通索引
这是最基本的索引类型,而且它没有唯一性之类的限制。普通索引可以通过以下几种方式创建:
创建索引,例如:

?
1
create index <indexname> on tablename (列名)</indexname>

修改表

?
1
alter table tablename add index [indexname] (列的列表)

创建表的时候指定索引,例如

?
1
create table tablename([...], index [indexname] (列的列表))

唯一性索引
这种索引和前面的“普通索引”基本相同,但又一个区别:索引列的所有值都只能出现一次,即必须唯一。唯一性索引可以用以下几种方式创建:
创建索引,例如:

?
1
create unique index <indexname> on tablename (columnname)</indexname>

修改表:

?
1
alter table tablename add unique [indexname] (columnname)

创建表的时候指定索引

?
1
create table tablename([...], unique [indexname] (columnname))

主键主键是一种唯一性索引,但它必须指定为“primary key”。如果你曾经用过auto_increment类型的列,你可能已经熟悉主键之类的概念了。主键一般在创建表的时候,指定,例如

?
1
create table tablename ([...], primary key(columnname))

但是,我们也可以通过修表的方式加入主键,例如:

?
1
alter table tablename add primary key (columnname)

每个表只能有一个主键
全文索引
MySQL从3.23.23开始支持全文索引和全文检索。在MySQL中,全文索引的索引类型为FULLTEXT。全文索引可以在varchar或者text类型的列上创建。它可以通过create table命令创建,也可以通过alter table 或者create index命令创建。对于大规模的数据集,通过alter table(或者create index)命令创建全文索引要比把记录插入带有全文索引的空表更快。本文下面的讨论不再设计全文索引,要了解更多的信息,请参见MySQL documentation。

单列索引与多列索引

索引可以是单列索引,也可以是多列索引。厦门我们通过具体的例子来说明这两种索引的区别。假设有这样的一个people表:

?
1
create table people (peopleid smallnt not null auto_increment, firstname char(50) not null, lastname char(50) not null, age smallint not null, townid smallint not null, primary key (peopleid));

简单来说,索引就好比一本书的目录,你只要浏览标题就可以快速的找到具体内容是放在哪一页。也就好似说select查找的时候不需要直接取搜索表,只需要查找索引,就可以直接定位到你想要查找的内容位置。索引带来的方便不是免费的,是以每次插入或者更新(相当于删除并插入)时要维护索引为代价的。索引如果一张表更多的是用户查询而很少插入那么就可以建立尽量多的索引以优化查询性能。相反如果一张表要经常插入后者更新,则尽可能少用索引,有的时候,甚至连主键都不建。

什么是索引?索引有哪几种?什么时候使用索引比较好?相关推荐

  1. oracle or索引失效_oracle数据库中索引会失效的几种情况

    创建Oracle 索引的目的是为了避免全表扫描数据,提高查询效率,但是如果sql语句写的不好致使索引失效,反而会影响数据查询效率.以下几种情况就会导致索引失效: 没有 WHERE 子句 众所周知,添加 ...

  2. 创建索引的方法有两种

    创建索引的方法有两种:创建表的同时创建索引,在已有表上创建索引. 方法一:创建表的同时创建索引. 使用这种方法创建索引时,可以一次性地创建一个表的多个索引(例如唯一性索引.普通索引.复合索引等),其语 ...

  3. oracle数据库中索引会失效的几种情况

    创建Oracle 索引的目的是为了避免全表扫描数据,提高查询效率,但是如果sql语句写的不好致使索引失效,反而会影响数据查询效率.以下几种情况就会导致索引失效: 1. 没有 WHERE 子句 众所周知 ...

  4. concurrentbag 删除指定元素_Python实现列表索引批量删除的5种方法_python

    这篇文章主要介绍了Python实现列表索引批量删除的5种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 最近用Java做项目 ...

  5. MySQL(六)事物(ADID,四种隔离级别)(七)索引(索引测试,原则)

    6-事物 文章目录 6-事物 1,执行事物 2,模拟事务 3,事务的四种隔离级别 7-索引 7.1, 索引的分类 7.2,测试索引 插入100万数据 测试查询耗时 7.3,索引原则 事务原则:ACID ...

  6. 浅谈屏蔽搜索引擎爬虫(蜘蛛)抓取/索引/收录网页的几种思路

    在大部分情况下,网站开发完成后,在运营期间,都希望搜索引擎收录网站的内容越多越好,但是有的时候为了安全期间不希望搜索引擎收录网页内容,比如在外网部署的监控系统等:  以下列举了屏蔽主流搜索引擎爬虫(蜘 ...

  7. 6种方式创建多层索引MultiIndex

    49_6种方式创建多层索引MultiIndex 公众号:尤而小屋 作者:Peter 编辑:Peter 大家好,我是Peter~ 在上一篇文章中介绍了如何创建Pandas中的单层索引,今天给大家带来的是 ...

  8. mysql 索引类型 mul_mysql的四种索引类型

    一.索引的类型 mysql索引的四种类型:主键索引.唯一索引.普通索引和全文索引.通过给字段添加索引可以提高数据的读取速度,提高项目的并发能力和抗压能力.索引优化时mysql中的一种优化方式.索引的作 ...

  9. 别再问我MySQL为啥没走索引?就这几种原因,全都告诉你

    工作中,经常遇到这样的问题,我明明在MySQL表上面加了索引,为什么执行SQL查询的时候却没有用到索引? 同一条SQL有时候查询用到了索引,有时候却没用到索引,这是咋回事? 原因可能是索引失效了,失效 ...

  10. MySQL索引的概念以及七种索引类型介绍

    MySQL索引的概念以及七种索引类型介绍. 文章目录 1 索引的概念 2 索引的类型 1 索引的概念 索引(在MySQL中也叫做"键(key)")是存储引擎用于快速找到记录的一种数 ...

最新文章

  1. 关于用例需要多少文档以及业务用例等等
  2. 两个Double相加,小数点有很多位问题
  3. mvc中ajax的跳转,springmvc ajax 跳转的学习笔记
  4. IIS下配置PHP遇到Service Unavailable的解决方法
  5. canvas 动画库 CreateJs 之 EaselJS(上篇)
  6. MFC中树形控件的应用——电话簿
  7. Visual Studio 2022 MFC 学习笔记(一):常见问题汇总
  8. 复合函数高阶求导公式_复合函数求导公式有哪些
  9. CF1060F Shrinking Tree
  10. jQuery AJAX回调函数this指向问题
  11. 【wordpress】文章编辑器插件
  12. [附源码]计算机毕业设计JAVA宠物医院管理系统
  13. MIT 公开课:Gilbert Strang《线性代数》课程笔记(汇总)
  14. 吉首大学新星杯——小阳数数
  15. SoO of EIGRP
  16. 《算法和数据结构》从语言到算法的过渡篇
  17. asp写的百度ocr识别文字-通用文字识别(高精度版)源码下载
  18. 小马识途营销顾问解读百度官网认证的价值和意义
  19. ORA-27012 out of memory
  20. 华中科技大学与亮风台成立增强现实联合实验室

热门文章

  1. 微信配网airkiss
  2. linux - find查找文件/grep搜索文件内容
  3. 微信小程序常用路由跳转方法
  4. 一、数据挖掘—初识数据挖掘
  5. UVa 11137 - Ingenuous Cubrency
  6. windows无法访问 计算机打印机,windows 7 无法连接到打印机 (错误0x0000000d)的解决方法...
  7. SAP中计划日历计算规则的理解
  8. C语言——逻辑运算符
  9. Python基础 -- 注释、变量以及数据类型、标识符和关键字、类型转、运算符
  10. JS脚本实现浏览器自动点击(阿里员工秒杀月饼)