本文是关于MySQL中索引的基础知识。主要讲了索引的意义与原理、创建与删除的操作。并未涉及到索引的数据结构、高性能策略等。

一、概述

1.索引的意义:用于提高数据库检索数据的效率,提高数据库性能。

数据库在检索数据时,如果没有索引,则只能从第一条记录开始逐条查找,效率很低,添加索引可以明显提升效率。

2.索引的原理:索引存储了数据库的表中的关键字的值。关键字是索引用来搜索数据的依据,可以是一列,也可以是几列,还可以是一列的开头部分(前缀索引)。

需要查找某条记录时,先在索引中查找该记录关键字的值,然后根据匹配的索引记录找到对应的数据行。

3.其他要点:

(1)一个表可以创建多个索引;但由于索引文件存储在硬盘上,每次更新数据都会自动维护索引,从而对硬盘进行读写,所以不宜创

建过多的索引。

(2)查询索引时,可以查询整个关键字,也可以查询关键字中的部分列,还可以只查询某一列值的开头部分(前缀查找)。

(3)创建主键约束、唯一性约束时,会自动创建主索引、唯一性索引,索引名和约束名相同,删除了索引也就是删除了约束;

创建外键约束时,会自动创建一个普通索引,索引名和约束名相同。

二、索引的创建

1.关键字的选取原则:

优先选择这些列作为关键字:

  • 离散度高的列。也就是说,选为关键字的列的值,重复越少越好。
  • 占用存储空间少、储存空间固定的列。比如,INT比CHAR更适合做关键字,CHAR比TEXT更适合做关键字。
  • 经常被WHERE、GROUP BY、ORDER BY所操作的列。因为创建索引的意义之一就是提高检索效率,而检索是通过SELECT语句实现的。因此,应将SELECT语句中常用的操作列优先选为关键字。、
避免选取从不出现在WHERE子句中的列,和更新频繁的列
2.创建索引
(1)创建表时创建索引:
CREATE TABLE 表名(
列1 数据类型 约束条件,
列2 数据类型 约束条件,
……
其他约束条件,
索引类型 INDEX 索引名(列名(长度))
)引擎、字符集、校对方式设定;

其中:

  • 索引类型:可省略,也可选择UNIQUE和FULLTEXT(全文索引:查询大字符串,只能建立在CHAR,VARCHAR,TEXT列上)
  • 长度:可省略,是用于前缀索引中,设定该列字符长度的
(2)在已有表上创建索引:
CREATE 索引类型 INDEX 索引名 ON 表名 (列名(长度));

ALTER TABLE 表名 ADD 索引类型 INDEX 索引名(列名(长度));

3.查看索引

SHOW INDEX FROM 表名;
SHOW KEYS FROM 表名;

4.删除索引

DROP INDEX 索引名 ON 表名;

MySQL中索引的基础知识的更多相关文章

  1. ASP.NET中的C#基础知识

    ASP.NET中的C#基础知识 说明:asp.net作为一种开发框架现在已经广为应用,其开发的基础除了前端的html.css.JavaScript等后端最重要的语言支持还是C#,下面将主要用到的基础知 ...

  2. MYSQL注入天书之基础知识

    第一部分/page-1 Basic Challenges Background-1 基础知识 此处介绍一些mysql注入的一些基础知识. (1)注入的分类---仁者见仁,智者见智. 下面这个是阿德玛表 ...

  3. 一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)

    这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 1.简述MySQL中索引类型对数据库的性能的影响 2.RDB和AOF机制 3.Redis的过期键的删除策略 4.Redis ...

  4. MySQL 中索引的限制

    MySQL 中索引的限制在使用索引的同时,我们还应该了解在MySQL 中索引存在的限制,以便在索引应用中尽可能的避开限制所带来的问题.下面列出了目前MySQL 中索引使用相关的限制.1. MyISAM ...

  5. MySQL索引,MySQL中索引的限制?

    MySQL中索引的限制: 1.MyISAM存储引擎引键的长度综合不能超过1000字节: 2.BLOB和TEXT类型的列只能创建前缀索引: 3.MySQL目前不支持函数索引: 4.使用!= 或者< ...

  6. day29—JavaScript中DOM的基础知识应用

    转行学开发,代码100天——2018-04-14 JavaScript中DOM操作基础知识即对DOM元素进行增删改操作.主要表现与HTML元素的操作,以及对CSS样式的操作.其主要应用知识如下图: 通 ...

  7. (转) MySQL中索引的限制

    转:http://book.51cto.com/art/200906/132459.htm 8.4.8  MySQL中索引的限制 在使用索引的同时,还应该了解MySQL 中索引存在的限制,以便在索引应 ...

  8. MySQL中索引和优化的用法总结

    1.什么是数据库中的索引?索引有什么作用? 引入索引的目的是为了加快查询速度.如果数据量很大,大的查询要从硬盘加载数据到内存当中. 2.InnoDB中的索引原理是怎么样的? InnoDB是Mysql的 ...

  9. javascript中BOM部分基础知识总结

    一.什么是BOM      BOM(Browser Object Document)即浏览器对象模型.      BOM提供了独立于内容 而与浏览器窗口进行交互的对象:      由于BOM主要用于管 ...

随机推荐

  1. Dagger2在Android开发中的应用

    世界是普遍联系的,任何事物和个体都直接或间接相互依赖,在时空长河中共同发展.在面向对象的世界中,更是如此,类与类之间的依赖,关联关系,模块(亦或是分层架构中的层)之间的耦合关系,都是我们在软件开发实践 ...

  2. Error creating document instance

    Error creating document instance.  Cause: org.xml.sax.SAXParseException; lineNumber: 52; columnNumbe ...

  3. Teacher implements java.io.Serializable

    package JBJADV003; public class Teacher implements java.io.Serializable{ private String name; privat ...

  4. Dev控件学习-GridControl中的BandGridview导出多层行头操作

    BandGridview默认导出的是Columns的列头信息,而不是Bands的列头信息,为了实现导出多层行头.代码如下 public static void ExportExcel2(DevExpr ...

  5. Android系统--输入系统(十三)Dispatcher线程情景分析_Reader线程传递事件

    Android系统--输入系统(十三)Dispatcher线程情景分析_Reader线程传递事件 1. 输入按键 我们知道Android系统的按键分为三类:(1)Global Key;(2)Syste ...

  6. 在Linux上创建Postgresql数据库

    由于前一次用默认的配置创建pgsql数据库倒置root的占用率达到97%. 重新创建一次数据库,很多坑又忘了. 创建一个放Data的文件夹,/majestic12/pgsql/data PGDATA ...

  7. Luogu 1064 金明的预算方案 / CJOJ 1352 [NOIP2006] 金明的预算方案(动态规划)

    Luogu 1064 金明的预算方案 / CJOJ 1352 [NOIP2006] 金明的预算方案(动态规划) Description 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己 ...

  8. JS - 讨论 - 编码习惯 - JavaScript代码到底要不要写分号?

    如题:烦请大家在评论区给出原创意见!多谢!

  9. Java虚拟机:JVM内存分代策略

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! Java虚拟机根据对象存活的周期不同,把堆内存划分为几块,一般分为新生代.老年代和永久代(对HotSpot虚拟机而言),这就是JVM的内存 ...

  10. jQuery点击缩略图切换大图代码

    很多网站上都会有点击缩略图切换成大图的效果,下面来分享一下它的源码 还是先来看效果截图 运行文件 然后点击下一张 下面分享源代码 html文件 <!DOCTYPE html PUBLIC &qu ...