索引:

  使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,例如 employee 表的姓(name)列。如果要按姓查找特定职员,与必须搜索表中的所有行相比,索引会帮助您更快地获得该信息。

  索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。

  索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引的方式与您使用书籍中的索引的方式很相似:它搜索索引以找到特定值,然后顺指针找到包含该值的行。

  在数据库关系图中,您可以在选定表的“索引/键”属性页中创建、编辑或删除每个索引类型。当保存索引所附加到的表,或保存该表所在的关系图时,索引将保存在数据库中。

  注意:

  并非所有的数据库都以相同的方式使用索引。作为通用规则,只有当经常查询索引列中的数据时,才需要在表上创建索引。索引占用磁盘空间,并且降低添加、删除和更新行的速度。在多数情况下,索引用于数据检索的速度优势大大超过它的不足之处。但是,如果应用程序非常频繁地更新数据或磁盘空间有限,则可能需要限制索引的数量。

  可以基于数据库表中的单列或多列创建索引。多列索引使您可以区分其中一列可能有相同值的行。

  如果经常同时搜索两列或多列或按两列或多列排序时,索引也很有帮助。例如,如果经常在同一查询中为姓和名两列设置判据,那么在这两列上创建多列索引将很有意义。

  确定索引的有效性:

  ● 检查查询的 WHERE 和 JOIN 子句。在任一子句中包括的每一列都是索引可以选择的对象。

  ● 对新索引进行试验以检查它对运行查询性能的影响。

  ● 考虑已在表上创建的索引数量。最好避免在单个表上有很多索引。

  ● 检查已在表上创建的索引的定义。最好避免包含共享列的重叠索引。

  ● 检查某列中唯一数据值的数量,并将该数量与表中的行数进行比较。比较的结果就是该列的可选择性,这有助于确定该列是否适合建立索引,如果适合,确定索引的类型。

  MySQL何时使用索引

  对一个键码使用>, >=, =, <, <=, IF NULL和BETWEEN

  • SELECT * FROM table_name WHERE key_part1=1 and key_part2 > 5;
  • SELECT * FROM table_name WHERE key_part1 IS NULL;

  当使用不以通配符开始的LIKE

SELECT * FROM table_name WHERE key_part1 LIKE 'jani%'

  在进行联结时从另一个表中提取行时

SELECT * from t1,t2 where t1.col=t2.key_part

  找出指定索引的MAX()或MIN()值

SELECT MIN(key_part2),MAX(key_part2) FROM table_name where key_part1=10

  一个键码的前缀使用ORDER BY或GROUP BY

SELECT * FROM foo ORDER BY key_part1,key_part2,key_part3

  在所有用在查询中的列是键码的一部分时间

SELECT key_part3 FROM table_name WHERE key_part1=1

------------------------------------------------------------------------------------------------------------------------------------

  MySQL何时不使用索引

  如果MySQL能估计出它将可能比扫描整张表还要快时,则不使用索引。例如如果key_part1均匀分布在1和100之间,下列查询中使用索引就不是很好:

SELECT * FROM table_name where key_part1 > 1 and key_part1 < 90

  如果使用HEAP表且不用=搜索所有键码部分。

  在HEAP表上使用ORDER BY。

  如果不是用键码第一部分

SELECT * FROM table_name WHERE key_part2=1

  如果使用以一个通配符开始的LIKE

SELECT * FROM table_name WHERE key_part1 LIKE '%jani%'

  搜索一个索引而在另一个索引上做ORDER BY

SELECT * from table_name WHERE key_part1 = # ORDER BY key2

论MySQL何时使用索引,何时不使用索引相关推荐

  1. 一句话说清聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM

    聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM经常遇到有人向我咨询这个问题,其实呢,网上帖子很多,也说的都对,但是呢,看客可不一定是真的理解了.所以今天在这里用最简短的语言让你明白这些 ...

  2. mysql单列索引和多列索引_mysql索引类型 normal, unique, full text

    问题1:mysql索引类型normal,unique,full text的区别是什么? normal:表示普通索引 unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用 ...

  3. mysql 索引 二叉树_MySQL 的索引,为什么是 B+而不是平衡二叉树

    数据库为什么使用 B+ 树? 前言 讲到索引,第一反应肯定是能提高查询效率.例如书的目录,想要查找某一章节,会先从目录中定位.如果没有目录,那么就需要将所有内容都看一遍才能找到. 索引的设计对程序的性 ...

  4. Mysql InnoDB B+树索引和哈希索引的区别? MongoDB 为什么使用B-树?

    B-树和B+树最重要的一个区别就是B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域. B+树 B+树是为磁盘及其他存储辅助设备而设计一种平衡查找树(不是二叉树).B+ ...

  5. 为什么MySQL数据库要用B+树存储索引?

    小史是一个应届生,虽然学的是电子专业,但是自己业余时间看了很多互联网与编程方面的书,一心想进BAT互联网公司. 话说两个多月前,小史通过了A厂的一面,两个多月后的今天,小史终于等到了A厂的二面. 简单 ...

  6. mysql 唯一索引_MySQL学会用索引,让你数据库的查询速度起飞

    MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度.打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一 ...

  7. mysql 查询优化 非索引_mysql 查询优化和索引使用心得

    -- sql优化案例 -- 1.not in 用left join on 替换 -- 2.like '%XXX%' 用 like 'XXX%' 替换 -- 3.limit 优化 实用,在分页中 EXP ...

  8. MySQL第九章索引_MySQL高级(索引优化+慢查询定位)

    一.先谈谈事务 1. ACID特性 1.1 原子性: 事务是最小的执行单位,不允许分割.事务的原子性确保动作要么全部完成,要么完全不起作用: 1.2 一致性: 执行事务前后,数据库从一个一致性状态转换 ...

  9. tp5更新某字段加1_爱可生详解MySQL 8.0:索引特性1-函数索引

    函数索引顾名思义就是加给字段加了函数的索引,这里的函数也可以是表达式.所以也叫表达式索引. MySQL 5.7 推出了虚拟列的功能,MySQL8.0的函数索引内部其实也是依据虚拟列来实现的. 我们考虑 ...

  10. mysql索引设计策略_MySQL索引设计一些策略

    前言 索引加快了检索的速度,但是却降低了数据列里插入.删除以及修改数值的速度.也就是说,索引降低了许多涉及写入的操作速度.之所以出现这种情况,是由于写入一条数据不仅仅是要写入到数据行,还需要所有的索引 ...

最新文章

  1. 下一代汽车的核心竞争力到底是什么?
  2. SQL分组多列统计(GROUP BY后按条件分列统计)
  3. 三大主流浏览器Web开发工具
  4. source, ~/.bashrc, ~/.bash_profile详解
  5. 【推荐】揭秘谷歌电影票房预测模型
  6. go空接口interface{}是任意类型
  7. 如何选择String
  8. formate JAVA_JAVA String.format 方法使用
  9. 双链集合添加删除算法
  10. 推流工具_【软件分享】小熊录屏VIP版(手机直播游戏必备推流工具)
  11. vue.js学习02之vue-cli脚手架创建项目环境搭建
  12. 443端口与80端口
  13. Java Socket设置timeout几种常用方式总结
  14. 5G移动通信网的定位技术发展趋势
  15. 论“期权股”的财富经 !!!
  16. 7、KSQL刨根问底和实战操作教程
  17. 索尼 a7 IV 和佳能 EOS R6 哪个好
  18. 南大计算机学院有几个院士,中国大学两院院士数量排名,看看谁的科研实力最强...
  19. send函数和recv函数
  20. 关于笔记本WLAN被禁用解决方法

热门文章

  1. 【组合数学】生成函数 ( 使用生成函数求解不定方程解个数示例 )
  2. LeetCode-337 House Robber III
  3. LightTools 切趾角度设置
  4. Git远程和分支管理
  5. DedeCms如何调用Discuz论坛主题等数据方法总结
  6. Chapter18-Export and Import Utilities
  7. 程序员到底要不要用框架开发?
  8. OpenGL中的着色模式GL_SMOOTH与GL_FLAT
  9. liunx(3)-内核模块编写与系统调用
  10. es2017 提供的针对字符串填充的函数:padStart、padEnd