资讯专栏INFORMATION COLUMN

MYSQL索引

sPeng / 1115人阅读

摘要:一条查询语句,如果没有索引,将对全表进行扫描。使用索引若此时查询列有个索引,就能快速定位到具体位置,找出相关列,将指定数据页面读入内存,就会大大降低。数据的增删改操作都需要维护索引,索引一多,意味着维护成本高了。小表建索引,往往适得其反。

什么是索引?
举个例子:新华字典,有目录,有正文内容。索引就相当于目录,正文内容就相当于数据。
索引有什么用?
索引用于快速查找在某列中有一特定值的行。

一条查询语句,如果没有索引,将对全表进行扫描。

如果所有的数据页面都不在内存中,则需要从硬盘上读取这些页面,从而产生大量的I/O,每次I/O都会消耗一定时间。

最终,总的查询时间,会大的惊人。

使用索引

若此时查询列有个索引,MYSQL 就能快速定位到具体位置,找出相关列,将指定数据页面读入内存,I/O 就会大大降低。

以字典为例,查找字母为 Z 开头的某个单词,先通过索引定位 Z 开头的单词的起始位置,从这里开始查询,从而节省了大量的时间。
一次查询能使用多个索引吗?
一次查询只能使用一个索引。
哪些常见情况不能用索引?
 like “%xxx”

 not in , !=

 对列进行函数运算的情况(如 where avg(age) = “20”)
如何分析是否正确用到索引?
explain select ...
联合索引的问题

假设,你有一个三列联合的索引:(col1, col2, col3)。

那么你将拥有三种索引使用方式:

 (col1)

 (col1, col2)

 (col1, col2, col3)

上述说的就是最左前缀 - leftmost prefix。

So,当你有多列查询需求时,你可以考虑建一个合适的联合索引。

关于like查询

like 的参数不以非通配符 % 开头的字符常量,就能使用索引。

SELECT * FROM tbl_name WHERE key_col LIKE "something%";        //匹配以something开头的字符串
SELECT * FROM tbl_name WHERE key_col LIKE "%something%";       //不使用索引
SELECT * FROM tbl_name WHERE key_col LIKE "something";         //精确匹配,等效于 “ = ” 运算符

假如,你在看一本成语词典,目录是按成语拼音顺序建立。

查询需求是:你想找以 “一” 字开头的成语(“一%”),和你想找包含一字的成语(“%一%”)。

你觉得哪个会更快呢?

索引越多越好?

大多数情况下,索引都能大幅度提高查询效率。

数据的增、删、改操作都需要维护索引,索引一多,意味着维护成本高了。

更多的索引需要更多的存储空间。比如:20页的书,有15页的目录?这就不合理了。

小表建索引,往往适得其反。比如:读个2页的宣传手册,你还先去找目录?
什么样的字段不适合建索引?
更新非常频繁的列

列的值唯一性太小,比如性别,Enum 类型的字段等

太长的列

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/46345.html

相关文章

  • MySQL数据库系统

    摘要:四概述是一个开源的关系型数据库管理系统,由瑞典公司开发,目前属于旗下产品。是最流行的关系型数据库管理系统之一,在应用方面,是最好的,关系数据库管理系统应用软件。支持大型的数据库。 一、数据库概述 数据库就是一个运行在系统上的软件,用于存储用户个人信息、用户的游戏资料等; 数据库是多个表的集合,是存储数据的仓库,以一定的组织方式存储的相互有关的数据 数据库由多个表组成,多个数据记录组成...

    ACb0y 评论0 收藏0
  • MySQL数据库系统

    摘要:四概述是一个开源的关系型数据库管理系统,由瑞典公司开发,目前属于旗下产品。是最流行的关系型数据库管理系统之一,在应用方面,是最好的,关系数据库管理系统应用软件。支持大型的数据库。 一、数据库概述 数据库就是一个运行在系统上的软件,用于存储用户个人信息、用户的游戏资料等; 数据库是多个表的集合,是存储数据的仓库,以一定的组织方式存储的相互有关的数据 数据库由多个表组成,多个数据记录组成...

    Reducto 评论0 收藏0
  • MySQL数据库之索引的应用

    摘要:唯一索引用来唯一标识数据库中的一条记录,但是与主键索引稍有不同,唯一索引允许索引列的值为空,但是不允许索引列的值发生重复。 前面几篇文章详细介绍了MySQL数据库的DML,DDL,DCL,DQL常用操作,本篇文章将介绍MySQL中一块对于开发和维护都比较重要的内容--MySQL索引的应用! 1、索引的作用(1)如果索引为唯一索引,可以保证数据库中每一行数据的唯一性(2)索引如果创建的合...

    lx1036 评论0 收藏0
  • SQL-SQL优化-索引

    摘要:在库存系统中,最重要的就是要防止超卖。系列创建高性能的索引索引是存储引擎用于快速找到记录的一种数据结构。对查询性能优化最有效的手段。性能优化梳理前言本文主要针对的是关系型数据数据库。用户可以通过特殊的关键字提示优化器,影响的决策过程。 图文并茂详解 SQL JOIN Join 是关系型数据库系统的重要操作之一,一般关系型数据库中包含的常用 Join:内联接、外联接和交叉联接等。如果我们...

    zacklee 评论0 收藏0
  • SQL-SQL优化-索引

    摘要:在库存系统中,最重要的就是要防止超卖。系列创建高性能的索引索引是存储引擎用于快速找到记录的一种数据结构。对查询性能优化最有效的手段。性能优化梳理前言本文主要针对的是关系型数据数据库。用户可以通过特殊的关键字提示优化器,影响的决策过程。 图文并茂详解 SQL JOIN Join 是关系型数据库系统的重要操作之一,一般关系型数据库中包含的常用 Join:内联接、外联接和交叉联接等。如果我们...

    kk_miles 评论0 收藏0
  • MySQL 索引

    摘要:另外,只有字段类型为和的字段才能设置全文索引。在中,主索引和辅助索引在结构上没有任何区别,只是主索引要求是唯一的,而辅助索引的可以重复。这个索引的是数据表的主键,因此表数据文件本身就是主索引。 索引原理 我们知道,MySQL 查询数据是从第一条记录开始依次查找,直到读完整个表或者找到匹配的行。数据库表的数据量越大,MySQL 查询所花费的时间就越多。索引的出现就是为了改善查询性能的。M...

    Salamander 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<