内容来自:https://yq.aliyun.com/articles/214494?utm_content=m_31338

对此我们来详细分析下(也就是大家在面试时需要说的):

  场景一,数据表规模不大,就几千行,即使不建索引,查询语句的返回时间也不长,这时建索引的意义就不大。当然,若就几千行,索引所占的空间也不多,所以这种情况下,顶多属于“性价比”不高。

  场景二,某个商品表里有几百万条商品信息,同时每天会在一个时间点,往其中更新大概十万条左右的商品信息,现在用where语句查询特定商品时(比如wherename=‘XXX’)速度很慢。为了提升查询效率可以建索引,但当每天更新数据时,又会重建索引,这是要耗费时间的。这时就需要综合考虑,甚至可以在更新前删除索引,更新后再重建。

  场景三,从上图中可以看到,因为在数据表里ID值都不相同,所以索引能发挥出比较大的作用。相反,如果某个字段重复率很高,如性别字段,或者某个字段大多数值是空(null),那么不建议对该字段建索引。

  请大家记住,一定是有业务需求了才会建索引。比如在一个商品表里,我们经常要根据name做查询,如果没有索引,查询速度会很慢,这时就需要建索引。但在项目开发中,如果不经常根据商品编号查询,那么就没必要对编号建索引。

  最后再强调一次,建索引是要付出代价的,没事别乱建着玩,同时在一个表上也不能建太多的索引。

  下面说下索引建好了该怎么用?毕竟大家花了不少时间和空间代价建了索引,至少得回本吧?

  如果出现一些不好的SQL语句,那么索引就白建了。下面通过一些具体的例子来看索引的正确用法。

  ①语句一:selectnamefrom商品表。不会用到索引,因为没有where语句。

  ②语句二:select*from商品表wherename=‘Java书’,会用到索引,如果项目里经常用到name来查询,且商品表的数据量很大,而name值的重复率又不高,那么建议建索引。

  ③语句三:select*from商品表wherenamelike‘Java%’这是个模糊查询,会用到索引,请大家记住,用like进行模糊查询时,如果第一个就是模糊的匹配符,比如wherenamelike‘%java’,那么在查询时不会走索引。在其他情况下,不论用了多少个%,也不论%的位置,只要不出现在第一个位置,那么都能用到索引。

  学生成绩表里有两个字段:姓名和成绩。现在对成绩这个整数类型的字段建索引。

  ①第一种情况,当数字型字段遇到非等值操作符时,无法用到索引。比如:
selectnamefrom学生成绩表where成绩>95,一旦出现大于符号,就不能用到索引,为了用到索引,我们应该改一下SQL语句里的where从句:where成绩in(96,97,98,99,100)

  ②第二种情况,如果对索引字段进行了某种左值操作,那么无法用到索引。

  能用到索引的写法:selectnamefrom学生成绩表where成绩=60

  不能用到索引的写法:selectnamefrom学生成绩表where成绩+40=100

  ③第三种情况,如果对索引字段进行了函数操作,那么无法用到索引。

  比如SQL语句:select*from商品表wheresubstr(name)=‘J’,我们希望查询商品名首字母是J的记录,可一旦针对name使用函数,即使name字段上有索引,也无法用到。

  关于索引,当然还有位图索引和复合索引等,如果大家要应聘更高级的岗位(比如有5年经验了),那么就不能止步于此了,但根据我的面试经验,上述关于索引的说辞对工作经验3年以下的候选人是有帮助的。

  其实我知道,不少程序员平时用过索引,但不知道怎么说,这很吃亏。对于高级程序员而言,如果你这都说不好,那么你的能力比初级的要高多少?对于初级程序员而言,如果你掌握了,而且能在面试中很好地说,那么你和同等能力的人相比,就很占优势。

MySQL优化——索引的更多相关文章

  1. Mysql优化-索引

    1. 索引的本质 MySQL官方对索引的定义为:索引是帮助MySQL高效获取数据的数据结构. 数据库查询是数据库的最主要功能之一.我们都希望查询数据的速度尽可能的快,因此 数据库系统的设计者会从查询算 ...

  2. MySQL优化索引

    1.  MySQL如何使用索引 索引用于快速查找具有特定列值的行.如果没有索引,MySQL必须从第一行开始,然后遍历整个表以找到相关的行.表越大,花费越多.如果表中有相关列的索引,MySQL可以快速确 ...

  3. 5.MySQL优化---索引优化专题

    来自互联网,整理转载. 摘要:多关于索引,分为以下几点来讲解: 一.索引的概述(什么是索引,索引的优缺点) 二.索引的基本使用(创建索引) 三.索引的基本原理(面试重点) 四.索引的数据结构(B树,h ...

  4. MySQL优化 - 索引优化

    索引(在MySQL中也叫做"键(key)")是存储引擎用于快速找到记录的一种数据结构. 索引对于良好的性能非常关键,尤其是当表的数据量越来越大时,索引对性能(查询)的影响愈发重要. ...

  5. mysql 优化(索引)

    表 collect   字段  id(int  自增),title(varchar),info(text),vtype(int) 表中数据130w: select * from collect whe ...

  6. MYSQL优化——索引覆盖

    索引覆盖:如果查询的列恰好是索引的一部分,那么查询只需要在索引文件上进行,不需要进行到磁盘中找数据,若果查询得列不是索引的一部分则要到磁盘中找数据. 建表: create table test_ind ...

  7. mysql优化-----索引覆盖

    一道面试题: 有商品表, 有主键,goods_id, 栏目列 cat_id, 价格price 说:在价格列上已经加了索引,但按价格查询还是很慢,问可能是什么原因,怎么解决? 答:在实际场景中,一个电商 ...

  8. MySQL数据库索引:索引介绍和使用原则

    本篇目录: 一.数据页与索引页 二.聚簇索引与非聚簇索引 三.唯一索引 四.索引的创建 五.索引的使用规则 六.数据库索引失效情况 本篇正文: 一.数据页与索引页 数据库的表存储分为数据页存储和索引页 ...

  9. 【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引

    本文地址 分享提纲: 1.为查询缓存优化你的查询 2. EXPLAIN 你的 SELECT 查询 3. 当只要一行数据时使用 LIMIT 1 4. 为搜索字段建索引 5. 在Join表的时候使用相当类 ...

随机推荐

  1. Gym 100548F Color 给花染色 容斥+组合数学+逆元 铜牌题

    Problem F. ColorDescriptionRecently, Mr. Big recieved n flowers from his fans. He wants to recolor th ...

  2. Linux环境下Gitblit服务搭建及秘钥配置

    一.安装gitblit服务 1.下载地址 https://pan.baidu.com/s/1wQ3TEE_gw5xZvyFPZB9xFg 2.上传至linux服务器并解压缩 tar xvf gitbl ...

  3. Liunx反弹shell的几种方式

    什么是反弹shell? 简单理解,通常是我们主动发起请求,去访问服务器(某个IP的某个端口),比如我们常访问的web服务器:http(https)://ip:80,这是因为在服务器上面开启了80端口的 ...

  4. 【APUE】第3章 文件I/O (3) 文件共享、原子操作、函数dup/dup2、函数sync/fsync/fdatasync、函数fcntl、函数ioct1、目录/dev/fd 使用说明

    1.文件共享 UNIX系统支持在不同的进程间共享打开文件.为了说明这种共享,以下介绍内核用于所有I/O的数据结构. 内核使用3种数据结构表示打开文件,它们之间的关系决定了在文件共享方面一个进程对另一个 ...

  5. gitolite 代码访问控制

    gitolite可用于代码访问控制,这里汇总一下git相关的内容. git quick start:创建git仓库 TortoiseGit:可视化git操作 egit eclipse插件:新版的IDE ...

  6. VS2015编译cef3-2357

    1.会遇到把警告当错误的情况 按照如下设置即可 2. 错误 C2334 “:”的前面有意外标记:跳过明显的函数体 (编译源文件 E:\cef_binary_3.2357.1271.g8e0674e_w ...

  7. Linux内核调试方法总结之sysrq

    sysrq [用途] Sysrq被称为”魔术组合键”, 是内建于Linux内核的调试工具.只要内核没有完全锁住,不管内核在做什么事情,使用这些组合键都可以搜集包括系统内存使用.CPU任务处理.进程运行 ...

  8. 4.Java JSON使用

    Java 中 JSON 的使用 分类 编程技术 本章节我们将为大家介绍如何在 Java 语言中使用 JSON. 类库选择 Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库. 下面 ...

  9. Linux(CentOS / RHEL 7) 防火墙

    CentOS / RHEL 7 防火墙 Table of Contents 1. 简述 2. 常用基本操作 2.1. 查看防火墙状态 2.2. 开启防火墙 2.3. 关闭防火墙 2.4. 开机自动启动 ...

  10. URL编码和解码

    1. 为什么需要编码 当数据不利于处理.存储的时候,就需要对它们进行编码.如对字符进行编码是因为自然语言中的字符不利于计算机处理和存储.对图片信息.视频信息.声音信息进行压缩.优化,将其“格式化”,是 ...