MySQL(7)— 索引
七、索引
MySQL官方对索引的定义为:索引(Index)是帮助 MySQL 高效 获取数据的数据结构。
7-1、索引的分类
- 主键索引 (primary key)
- 唯一的标识,主键不可重复,只能有一个列作为主键
- 唯一索引(unique key)
- 唯一索引的 "唯一" 是指为列唯一,而唯一索引可重复
- 常规索引 (key / index)
- 默认的索引,关键字 key / index 设置
- 全文索引 (FullText)
- 在很大数据量才会使用,快速定位数据
基础语法
-- 索引的添加
-- 1、在创建表的时候用关键字声明
-- 2、创建后,用 ALTER/CREATE 进行添加
-- 显示 表A 所有的索引信息
show index from 表A
-- 增加一个全文索引: (索引名) 列名
alter table 表 add fulltext index `aaa` (`aaa`)
-- explain 分析sql的执行状况, 在语句的最前方加上即可
7-2、索引的测试
-- 创建索引前:(在100W条数据中查询某行记录)
SELECT * FROM app_user WHERE `name` = '用户99999' -- 执行耗时 : 0.566 sec
SELECT * FROM app_user WHERE `name` = '用户99999' -- 执行耗时 : 0.564 sec
SELECT * FROM app_user WHERE `id` = 99999 -- 执行耗时 : 0 sec 主键索引
-- 创建索引后:(在100W条数据中查询某行记录)
-- 索引命名规范: id_表名_字段名
CREATE INDEX id_app_user_name ON app_user (`name`) -- 执行耗时 : 11.511 sec
EXPLAIN SELECT * FROM app_user WHERE `name` = '用户999989' -- 执行耗时 : 0 sec
创建索引前:(在100W条数据中查询某行记录)执行耗时 : 0.563 sec
EXPLAIN 关键字显示 sql 执行情况:
======================================================================================================================================================================
创建索引后:(在100W条数据中查询某行记录)几乎不用时间
EXPLAIN 关键字显示 sql 执行情况:
总结:索引在数据量小的时候,区别不大;但在大数据的时候,查询效率提升明显!
7-3、索引的使用
- 索引不是越多越好
- 不要对经常变动的数据加索引
- 小数据量的表不需要加索引
- 应该加在常用来 查询 的字段上
MySQL(7)— 索引的更多相关文章
- 【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引
本文地址 分享提纲: 1.为查询缓存优化你的查询 2. EXPLAIN 你的 SELECT 查询 3. 当只要一行数据时使用 LIMIT 1 4. 为搜索字段建索引 5. 在Join表的时候使用相当类 ...
- MySQL中索引和优化的用法总结
1.什么是数据库中的索引?索引有什么作用? 引入索引的目的是为了加快查询速度.如果数据量很大,大的查询要从硬盘加载数据到内存当中. 2.InnoDB中的索引原理是怎么样的? InnoDB是Mysql的 ...
- MySQL 联合索引详解
MySQL 联合索引详解 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c ...
- Mysql复合索引
当Mysql使用索引字段作为条件时,如果该索引是复合索引,必须使用该索引中的第一个字段作为条件才能保证系统使用该索引,否则该索引不会被使用,并且应尽可能地让索引顺序和字段顺序一致
- 如何正确建立MYSQL数据库索引
索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytabl ...
- mysql高性能索引策略
转载说明:http://www.nyankosama.com/2014/12/19/high-performance-index/ 1. 引言 随着互联网时代地到来,各种各样的基于互联网的应用和服务进 ...
- MySQL创建索引语法
1.介绍: 所有mysql索引列类型都可以被索引,对来相关类使用索引可以提高select查询性能,根据mysql索引数,可以是最大索引与最小索引,每种存储引擎对每个表的至少支持16的索引.总索引长度为 ...
- mysql使用索引优化查询效率
索引的概念 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针.更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度.在没 ...
- Mysql中索引的 创建,查看,删除,修改
创建索引 MySQL创建索引的语法如下: ? 1 2 3 CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [USING index_type] ON ...
- mysql 联合索引(转)
http://blog.csdn.net/lmh12506/article/details/8879916 mysql 联合索引详解 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中 ...
随机推荐
- Spring5参考指南:组件扫描
文章目录 组件扫描 @Component 元注解和组合注解 组件内部定义Bean元数据 为自动检测组件命名 为自动检测的组件提供作用域 生成候选组件的索引 组件扫描 上一篇文章我们讲到了annotat ...
- CF1285 --- Dr. Evil Underscores
CF1285 --- Dr. Evil Underscores 题干 Today as a friendship gift, Bakry gave Badawy \(n\) integers \(a_ ...
- node.js koa 实现长轮询
长轮询的实现原理:浏览器发出请求之后,服务端资源如果没有就绪,那么并不立即返回,而是在一个时间范围内,不断地去查询资源是否就绪,如果就绪,就返回资源,如果超时了还没有就绪,就返回超时. 代码实现如下: ...
- Vue Cli 3 报错:router is not defined
报错内容: 报错原因: 代码全部放在了路由配置的main.js文件里,router没有定义,使用的时候报undefined 解决方法: 把router.beforeEach放在main.js里面
- webpack前端构建angular1.0!!!
webpack前端构建angular1.0 Webpack最近很热,用webapcak构建react,vue,angular2.0的文章很多,但是webpack构建angualr1.0的文章找来找去也 ...
- [New Portal]Windows Azure Web Site (3) 创建Web Site和云端数据库
<Windows Azure Platform 系列文章目录> 在前一章的内容里,我介绍了使用Windows Azure Management Portal创建Web Site.本章,我将 ...
- matlab画图(一)
例1.画出函数图像 >> x=-pi/2:0.01:pi/2; >> y=x+sin(x)+exp(x); >> plot(x,y,'r','Linewidth', ...
- Linux 搭建nginx的PID
pid logs/nginx.pid 安装的时候就是没有,其实在启动 nginx 时自动生成的 里面存放的是 当前 nginx 住进程的 ID 号:所以在配置文件中指定pidpid /usr/loca ...
- ACM算法--二分法--模板
// 在单调递增序列a中查找>=x的数中最小的一个(即x或x的后继) while (l < r) { int mid = (l + r) / 2; if (a[mid] >= x) ...
- Java大数据秋招面试题
以下为整理的自己秋招遇到的面试题:主要是Java和大数据相关题型:根据印象整理了下,有些记不起来了. 死锁.乐观锁.悲观锁synchronized底层原理及膨胀机制ReetrantLock底层原理,源 ...