什么是索引

索引的描述:

在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

索引的作用:

当表中有大量记录时,若要对表进行查询,第一种搜索信息方式是全表搜索,是将所有记录一一取出,和查询条件进行一一对比,然后返回满足条件的记录,这样做会消耗大量数据库系统时间,并造成大量磁盘I/O操作;第二种就是在表中建立索引,然后在索引中找到符合查询条件的索引值,最后通过保存在索引中的ROWID(相当于页码)快速找到表中对应的记录。

索引的创建查询和删除

创建索引

创建一个简单的单列索引:

create index 索引名称 on 表名称(创建索引的列);
例如:

create index index_test on table_test(aid);

创建唯一索引:
create unique index 索引名称 on 表名称 (创建索引的列);
例如:

create unique index index_test on table_test(aid);

创建一个复合索引:
create index 索引名称 on 表名称(索引列1,索引列2,…)
例如:

create index index_test on table_test(aid,aname);

查看索引

查看某张表的所有索引:
select * from all_ind_columns where table_name=‘表名’
例如:

select * from all_ind_columns where table_name='table_test'

查看所以有的索引名称:
select index_name from all_indexes where table_name = ‘表名’;
例如:

select index_name from all_indexes where table_name = 'table_test';

删除索引

删除索引:
drop index 索引名称

索引的使用

查询

只要数据库认为可以使用某个已经创建的索引,索引就会自动运用。但是使用复合索引要注意“顺序”,必须与创建的顺序一致。
例如创建时是:
create index index_test on table_test(id,name);
使用时必须是:
select * from table_test where id = ‘1’ and name = ‘whd’
而不能使用:
select * from table_test where id = ‘1’
select * from table_test where name = ‘whd’
这两种情况都不会触发索引。

插入

1.插入时如果是唯一索引的话,索引值是不能相同的。
2.如果索引值是null,则可以插入多条
3.如果索引值是“”,不可以插入多条

索引失效

索引失效的情况
1.以%开头的like查询不能使用B-Tree索引
2.隐式转换时,当列类型是字符串时候,要是where查询时候没有引起来,就也不会走索引
3.复合索引情况下不满足最左原则Leftmost,也不会使用复合索引。
4.如果MySQL估计使用索引比全表扫描更慢,则不使用索引。
以or分割开的条件,如果or前的条件列中有索引,而后面的列中没有索引,那么涉及的索引都不会被用到。因为or后面的条件列中没有索引,那么后面的查询肯定要走全表扫描,在存在全表扫面的情况下,就没有必要多一次索引扫面增加I/O访问,一次全表扫描过滤条件就足够了。

表索引的定义、创建和使用相关推荐

  1. Oracle中查询用户表/索引/视图的创建语句

    1.查询当前用户下表的创建语句 select dbms_metadata.get_ddl('TABLE','ux_future') from dual; 2.查询其他用户下表的创建语句 select ...

  2. mysql 重置表索引_MySQL管理表和索引

    MySQL管理表和索引 SQL语句: 数据库 表 索引 视图 DML创建数据库: CREATE DATABASE|SCHEMA [IF NOT EXISTS] db_name [CHARACTER S ...

  3. 多索引表 (5)创建多索引表

    1. 创建表 class/struct 定义一个持久化对象. 该对象需要有一个const的成员作为主键,类型为uint64_t 二级主键可选,提供不同的键类型 为每个二级索引定义一个键导出器,键导出器 ...

  4. mysql建表索引_Mysql建表+创建索引

    创建表时可以直接创建索引,这种方式最简单.方便.其基本形式如下: CREATE TABLE 表名( 属性名 数据类型[完整性约束条件], 属性名 数据类型[完整性约束条件], ...... 属性名 数 ...

  5. 表的设计和创建、视图和索引以及事务

    1. 表设计 前提 设计表首先应该按需遵循三范式. 三范式:1NF-->列不可再分最小原子(避免重复);在第一范式(1NF)中表的每一行只包含一个实例的信息.2NF-->主键依赖(确定唯一 ...

  6. mysql 创建表普通索引_MySQL索引篇,创建表时创建索引

    索引对于MySQL数据库查询速度具有无可取代的作用,一个合适的索引能给数据查询的效率带来巨大的提升,本文来给大家讲讲如何创建索引,索引的最佳创建方式是在建表的时候就确定好要索引的字段并建立好索引. 索 ...

  7. oracle创建索引占用表空间吗,oracle创建索引表空间

    或者 drop tablespace 表空间名称 including contents;(表空间下有数据时候用) temporary tablespace 是 oracle 里临时表空间,临时表空间主 ...

  8. mysql索引总结----mysql 索引类型以及创建

    文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基 ...

  9. mysql技术内幕innodb存储引擎——表索引算法和锁_(转)Mysql技术内幕InnoDB存储引擎-表索引算法和锁...

    表 原文:http://yingminxing.com/mysql%E6%8A%80%E6%9C%AF%E5%86%85%E5%B9%95innodb%E5%AD%98%E5%82%A8%E5%BC% ...

最新文章

  1. R语言Brown-Forsythe检验验证组间方差是否相等实战:执行Brown-Forsythe检验、如果各组间的方差不相等我们该怎么办(进行方差分析)
  2. 修改nw.js的exe文件使其请求管理员权限
  3. Unix/Linux下的/etc目录
  4. Date Picker和UITool Bar的使用
  5. 轻松使用计算机,职称计算机Excel辅导:简单四招让你使用Excel轻松提速
  6. Vue「一」—— webpack 的基本使用及常用配置
  7. 擷取 GridView 資料列的欄位值集合
  8. 计算机二级python考试大纲2020_【2020年9月全国计算机二级Python考试大纲】- 环球网校...
  9. 10月31 安装redis报错
  10. JAVA——根据QQ群号得到idkey以及QQ群加群链接[网页版本]解决方案
  11. 品味奢华 匠心独韵——飞利浦Fidelio T1设计与声音的哲学
  12. 一文搞懂K-means聚类算法
  13. 【网络经济与企业管理】选择题,精讲
  14. 应用程序无法正常启动0xc000007b的解决方法(PhotoScan为例)
  15. linux检查网络是否通畅_Linux检测网络通畅命令
  16. 空洞卷积/扩张卷积(Dilated convolution)-笔记
  17. Maya动画1:基础知识小球弹跳
  18. 四 【java基础】 程序流程控制- 分支结构
  19. 【NFC】【S32 DS】Warning: Not all breakpoints couldbe written. Continue?
  20. 你真的会做项目经理吗

热门文章

  1. 路由器与ospf协议的深入了解。
  2. 中医门诊电子病历xml文档数据读入数据库实验流程演示
  3. python图片压缩pako_在Python中使用Pako deflate
  4. (毕业设计资料)基于51单片机的公交自动报站系统
  5. c#使用百度智能云,文字识别、语音识别demo总结
  6. DELMIA学习笔记(一)Humain Builder
  7. 抖音音乐号副业项目,创新玩法解密
  8. 下载vs后,移动windows kits文件夹(不使用快捷方式的方法)
  9. Python如何实现分布式爬虫
  10. 淘宝自动刷喵币!靠这一个脚本就够了