mysql笔记-索引
什么是聚簇索引
聚簇索引:索引的叶节点就是数据节点(索引值)。而非聚簇索引的叶节点仍然是索引节点(告诉你怎么在表中查找这一记录),只不过有一个指针指向对应的数据块。
Innodb和MyIsam区别
转载自 (https://www.zhihu.com/question/20596402)
- InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;
- InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;
- InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
- InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
- Innodb不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高;
普通索引
1.创建一张用户表,建立普通索引 idx_name
CREATE TABLE `user_tbl` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL DEFAULT '',
`age` int(11) NOT NULL,
`score` float NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#插入两条数据
INSERT INTO `user_tbl` (`id`, `name`, `age`, `score`)
VALUES
(1, 'www', 22, 66),
(2, 'com', 23, 77);
2.使用like查询
explain select * from user_tbl where name like 'w%';
执行结果
1 SIMPLE user_tbl NULL range idx_name idx_name 767 NULL 1 100.00 Using index condition
有用到索引
explain select * from user_tbl where name like '%w';
执行结果
1 SIMPLE user_tbl NULL ALL NULL NULL NULL NULL 2 50.00 Using where
没有用到索引
联合索引
建立联合索引
KEY `indx_age_score` (`age`,`score`)
以下sql是否有用到索引
explain select * from user_tbl where age<22//有用到部分索引
1 SIMPLE user_tbl NULL range indx_age_score indx_age_score 4 NULL 1 100.00 Using index condition
explain select * from user_tbl where age=22// 用到部分索引
1 SIMPLE user_tbl NULL ref indx_age_score indx_age_score 4 const 1 100.00 NULL
explain select * from user_tbl where age<>22// 没有用到索引
1 SIMPLE user_tbl NULL ALL indx_age_score NULL NULL NULL 2 100.00 Using where
explain select * from user_tbl where age=22 and score=66// 有用到索引
1 SIMPLE user_tbl NULL ref indx_age_score indx_age_score 8 const,const 1 100.00 Using index condition
explain select * from user_tbl where age=22 and score>66// 有用到索引
1 SIMPLE user_tbl NULL range indx_age_score indx_age_score 8 NULL 1 100.00 Using index condition
explain select * from user_tbl where age<22 and score>66// 有用到索引
1 SIMPLE user_tbl NULL range indx_age_score indx_age_score 4 NULL 1 50.00 Using index condition
explain select * from user_tbl where age<22 and score<66// 有用到索引
1 SIMPLE user_tbl NULL range indx_age_score indx_age_score 4 NULL 1 50.00 Using index condition
explain select * from user_tbl where score=66// 没有用到索引
1 SIMPLE user_tbl NULL ALL NULL NULL NULL NULL 2 50.00 Using where
explain select * from user_tbl where score<66// 没有用到索引
1 SIMPLE user_tbl NULL ALL NULL NULL NULL NULL 2 50.00 Using where
mysql笔记-索引的更多相关文章
- 高性能Mysql笔记 — 索引
index优化 对于频繁作为查询条件的字段使用索引 注意索引字段类型的隐式转换,数据库类型和应用类型要一致 索引的种类 唯一索引,成为索引的列不能重复 单列索引,一个索引只包含一列 单列前缀索引,有些 ...
- mysql笔记——索引
什么是索引? 数据库中的一个对象. 在数据库中用来加速表的查询. 通过使用快速路径访问方法定位数据,减少了磁盘的i/o. 与表分别独立存放,但不能独立存在,必须属于某个表. 由数据库自动维护,表被删除 ...
- 高性能MySQL笔记 第5章 创建高性能的索引
索引(index),在MySQL中也被叫做键(key),是存储引擎用于快速找到记录的一种数据结构.索引优化是对查询性能优化最有效的手段. 5.1 索引基础 索引的类型 索引是在存储引擎层而 ...
- mysql笔记02 创建高性能的索引
创建高性能的索引 1. 索引(在MySQL中也叫做"键(key)")是存储引擎用于快速找到记录的一种数据结构. 2. 索引可以包含一个或多个列的值.如果索引包含多个列,那么列的顺序 ...
- Mysql学习笔记—索引
一.什么是索引 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 在数据 ...
- MySQL笔记(8)-- 索引类型
一.背景 前面我们讲了SQL分析和索引优化都涉及到了索引,那么什么是索引,它的模型有什么,实现的机制是什么,今天我们来好好讨论下. 二.索引的介绍 索引就相当书的目录,比如一本500页的书,如果你想快 ...
- MySQL笔记汇总
[目录] MySQL笔记汇总 一.mysql简介 数据简介 结构化查询语言 二.mysql命令行操作 三.数据库(表)更改 表相关 字段相关 索引相关 表引擎操作 四.数据库类型 数字型 字符串型 日 ...
- 小白学习mysql之索引初步
导语 索引在数据库中的地位是及其的重要,同时要想完全的掌握索引并不是一件容易的事,需要对数据的查询原理以及计算机操作系统有深刻的认识,当然相关的算法和数据结构也是必须的.因此,这篇文章感到了一些压力, ...
- 涂抹mysql笔记-数据库中的权限体系
涂抹mysql笔记-数据库中的权限体系<>能不能连接,主机名是否匹配.登陆使用的用户名和密码是否正确.mysql验证用户需要检查3项值:用户名.密码和主机来源(user.password. ...
随机推荐
- 通过Windows API实现的MDI简易程序
## #include <windows.h> #include <tchar.h> HINSTANCE hInst; ATOM WindowRegister(WNDPROC ...
- winSockets编程(三)最简单的C/S形式
功能:向服务器端发送一个字符串,属于最简易的形式,一共需要4个主要步骤,初始化-建立套接字-连接服务器-发送数据 /****************************************** ...
- noip第25课作业
1. 求一个有向图所有顶点入度的和 输入有向图的顶点个数,边数以及各顶点之间的关联情况,要求求出这个有向图的所有顶点入度的总和. [输入格式] 第1行:2个空格分开的整数n(2<=n< ...
- Android 模仿微信发送图片 钟罩效果
参考资料http://trylovecatch.iteye.com/blog/1189452 http://bbs.51cto.com/thread-1031415-1.html### 1.添加资源文 ...
- python生成器实例
生成器是一种特殊的迭代器,它有yield语句 #coding:utf-8def fibs(max): n,a,b = 0,0,1 while n < max: yield b a , b = b ...
- 6.关键字static
在java中并不存在全局变量的概念,但是我们可以通过static关键字来实现一个“为全局”的概念,在java中static表示“全局”和“静态”的意思,他可以用来修饰成员变量和方法,也可以用来修饰代码 ...
- bootstrap 警告框多个删除
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- Kafka auto.offset.reset
要从头消费kafka的数据,可以通过以下参数: Kafka auto.offset.reset = earliest
- poj 2155 区间更新 单点查询
Matrix Time Limit: 3000 MS Memory Limit: 65536 KB 64-bit integer IO format: %I64d , %I64u Java class ...
- GitHub 教程【转】
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...