汉字很多,人力有时尽,人不可能记住所有的字,为了解决这个问题,于是有了字典。数据库里的数据很多,为了方便检索,于是有了索引。

索引,是一种数据结构,在这种数据结构中实现了高级的查找算法,索引可以帮助我们高效地获取数据,提高查询效率。

既然索引有这样的好处,那我们是不是每个字段都该建立索引呢?

当然是不,物极必反,索引是需要占用空间的,而且索引本身也不小,不能存储在内存空间,是存放在磁盘中的。

如果每个字段都建立索引,后果可想而知。

讨论索引的时候,如果没有特别的指明类型,一般都是B树索引。BTree索引可以查阅相关资料了解下,不赘述了。

除了B树索引,另外还有哈希索引等。

索引有哪些分类?

1.单值索引

单值索引是指一个索引只包含一个字段,一个表可以创建多个单值索引,但也不宜过多。

2.唯一索引

主键创建后一定包含一个唯一索引;但唯一索引不一定是主键,允许有空值,一个表可以创建多个唯一索引。

3.复合索引

因为一个查询一次至多只能使用一个索引,所以,如果都使用单值索引,在数据量较大的情况下,不能很好的区分数据,
于是引入了复合索引。

需要注意的是:复合索引是有顺序的! 举例说明一下。

例如,user表里有id,name,sex三个字段,并且我们创建了name+sex的复合字段。
select * from user where name=x and sex=x;
这个情况是允许使用上面的复合索引的。select * from user where name=x;
这个情况也是允许使用上面的复合索引的。select * from user where sex=x and name=x;
这种情况不允许使用,复合索引有顺序就是指这个意思。select * from user where sex=x;
这种情况也不允许使用索引哦。

复合索引是遵循向左原则的,只要在查询的时候,是按照复合索引从左到右的顺序依次查询

不管查询条件是否完全满足所有的符合索引的列,都可以使用部分的符合索引;

选择哪些列创建索引?

1.查询较为频繁的字段应该创建索引;
2.唯一性太差的字段不应该创建索引,就算这个字段经常作为查询条件;
3.更新频繁的字段不应该创建索引,索引是需要维护成本的;
4.有where条件时才会走索引,所以如果这个列不会作为where的查询条件,没有必要为这个字段创建索引;

不走索引的情况

在以前的工作中,有一次发现在特殊的情况下,即使你创建了索引,并且也在where加上了索引条件,查询过程中还是没有走索引。例如:
1.使用不等于(!= 或者<>)的时候MySQL 无法使用索引
2.like 后面的字符当首位为通配符时不走索引;如
like "北%",这种情况是走索引的
like "%北",这种情况是不走索引的
3.索引字段 is null 不走索引;
4.索引字段前加了函数或参加了运算不走索引;

转载于:https://www.cnblogs.com/tinyj/p/9861109.html

mysql,简单介绍一下索引相关推荐

  1. [第11天]mySQL简单介绍

    昨天我们说到了SQL,很多朋友说很难,我也知道很难的,说那个只是让大家有个基本的了解,不然以后说一些问题时会很困难的.今天我们来说mySQL,之所以说它是为了让大家对数据库能有个较深的了解.MySQL ...

  2. MySQL笔记之MySQL简单介绍及DQL语言

    MySQL介绍 MySQL服务的启动和停止: 方式一:通过命令行 net start 服务名 net stop 服务名 MySQL服务的登录和退出: 登录:mysql [ -h 主机名 -p 端口号 ...

  3. MySQL数据库介绍——包含索引、视图、事务、引擎

    文章目录 什么是数据库 数据库安装 索引 视图 事务 MySQL数据库优化方式 引擎 什么是数据库 平时我们大家看到的各种网站.网页,其实里面最底层的内容基本上都来自于数据库.首先我们看到的Web页面 ...

  4. 数据库开发——MySQL——简单介绍和安装

    数据库 数据实际上就是描述事物特征的一组符号,数据库指的就是存储数据的仓库. 基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上. 在软件开发过程中,程 ...

  5. mysql简单介绍一对一,一对多,多对多关系处理办法

    一对一关系示例:一个学生对应一个学生档案材料,或者每个人都有唯一的身份证编号. 一对多关系示例:一个学生只属于一个班,但是一个学院有多名学生. 多对多关系示例:一个学生可以选择多门课,一门课也有多名学 ...

  6. python alter table_python(pymysql)之mysql简单操作

    一.mysql简单介绍 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库 ...

  7. oracle的优化适用于mysql吗_性能优化之数据库优化,适用于Sqlite、Mysql、Oracle、Sql server,详细介绍了索引和事务及部分针对Sqlite的优化...

    本文为性能优化的第一篇--数据库性能优化,原理适用于大部分数据库包括Sqlite.Mysql.Oracle.Sql server,详细介绍了索引(优缺点.分类.场景.规则)和事务,最后介绍了部分单独针 ...

  8. 在mysql中unique唯一索引的作用_MySQL_MySQL中的唯一索引的简单学习教程,mysql 唯一索引UNIQUE一般用于不 - phpStudy...

    MySQL中的唯一索引的简单学习教程 mysql 唯一索引UNIQUE一般用于不重复数据字段了我们经常会在数据表中的id设置为唯一索引UNIQUE,下面我来介绍如何在mysql中使用唯一索引UNIQU ...

  9. mysql binlog update_mysql binlog 简单介绍与基于binlog数据恢复

    mysql binlog 简单介绍与基于binlog数据恢复 通过备份文件恢复 binlog(本节重点) binlog 二进制日志文件 show variables like 'log_bin'; 二 ...

最新文章

  1. 追踪JVM中的本地内存
  2. 【Android NDK 开发】NDK 交叉编译 ( Ubuntu 中交叉编译动态库 | Android Studio 中配置使用第三方动态库 )
  3. Android 浏览器 —— 使用 WebView 实现文件下载
  4. RocketMq namesvr 最佳实践
  5. MySQL索引知识点
  6. MySQL的timestamp字段可以使用的范围是多少
  7. 笔记:《突破现实的困境:趋势、禀赋与企业家的大战略》
  8. Oracle推断值为非数字
  9. 同步数据太多php网页卡死_curl_multi网页假死/卡死的解决方法
  10. wps小写金额转大写快捷键_WPS轻松办公—将数字转换中文大写的两种方法
  11. Ubuntu 下搭建 GCC 交叉编译工具链
  12. Python3爬取搜狗微信公众号
  13. 【WLAN】【基础知识】WIFI那些事儿之Beamforming
  14. 微服务等于 Spring Cloud?了解微服务架构和框架
  15. 数据结构-算法与算法描述
  16. CSAPP LAB Binary bombs实验报告
  17. latex排版[4]:子公式分别编号
  18. Linux Mint 15使用问题记录
  19. Quectel EC600N-CN 中尺寸物联网首选LTE Cat 1模块[移远通信]
  20. 计算税率c语言编写程序,C语言编写一个计算个人所得税的程序,要求输入收入金额,能够输...

热门文章

  1. cad 关键字被保留了?选择集关键字保留了? N S W E关键字无法用?
  2. 3.ELK 之elasticsearch CRUD
  3. Python学习之==json处理
  4. pyhton中的魔术方法
  5. LeetCode 64. Minimum Path Sum(最小和的路径)
  6. ES6学习笔记之Promise
  7. [TYVJ] P1016 装箱问题
  8. 【AJAX】DWR使用总结
  9. [WP]关于WP7的后台的一些小事情
  10. php truepath,php – 为什么switch(true)具有比if()elseif()更小的NPath复杂度?