mysql重点--索引
1.关于索引
# 什么是索引
索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据。
#索引的作用
加速查询和约束。
# 为什么索引查询会变快
没创建一个索引会相应的创建一个索引表。索引表是由相应的数据和B-tree数字组成:
30
10
40
5
15
35
66
1
6
11
19
21
39
55
100
上述的数字结构就是B-tree数字组成的索引目录,相应的每一个数字代表一个索引目标。若是索引列有1024个数据,
那么会生成10层这样的数据。也就是在找寻每一个索引目标平均为10次。而没有创建索引的列在寻找的时候要遍历
整个数据结构,即最多1024次。提升的速率可想而知。
2.索引类型
- 普通索引
- 唯一索引
- 主键索引
- 组合索引
- =========分割===========
- 覆盖索引
- 全文索引
- 索引合并
普通索引 index
功能:加速查找
条件:无(可以为空,可以重复)
创建方法:
1.创建table时创建
create table in1(
nid int not null auto_increment primary key,
name varchar(32) not null,
email varchar(64) not null,
extra text,
index ix_name (name) )
其中ix_name 为索引的名字
2.table创建好后添加(必须符合索引条件)
create index index_name on table_name(column_name)
唯一索引 unique
功能:加速查找
条件:不能重复,可以是null。
创建方法:
1.创建table时创建
create table in1(
nid int not null auto_increment primary key,
name varchar(32) not null,
email varchar(64) not null,
extra text,
unique ix_name (name) )
其中ix_name 为索引的名字
2.table创建好后添加(必须符合索引条件)
create unique index index_name on table_name(column_name);
主键索引 primary key
主键是特殊的索引,在创建主键的同时已经创建好了索引表。
功能:加速查找
条件:不能重复,不能null。
创建方法:
1.创建table时创建
create table in1(
nid int not null auto_increment primary key,
name varchar(32) not null,
email varchar(64) not null,
)
or
create table in1(
nid int not null auto_increment ,
name varchar(32) not null,
email varchar(64) not null,
primary key(nid)
)
2.table创建好后添加(必须符合索引条件)
alter table table_name add primary key(nid);
删除主键
alter table 表名 drop primary key;
alter table 表名 modify 列名 int, drop primary key;
组合索引
组合索引又叫联合(普通,唯一)索引。其实就是创建索引时变为多列。
功能:加速查找
条件:根据创建形式
创建方法:
1.创建table时创建
create table in1(
nid int not null auto_increment primary key,
name varchar(32) not null,
email varchar(64) not null,
extra text,
unique ix_name (name,nid) ) # 联合唯一索引,也别的是两列的唯一指的是合起来的唯一。
(“ccc”,3)和(“ccc”,4)可以存在。
其中ix_name 为索引的名字
2.table创建好后添加(必须符合索引条件)
create unique index index_name on table_name(column_name);
注意:
组合索引遵循最左匹配。即(nid,name,addr)在这个组合索引中,若是有
select * from table_name where name = "fff" and addr = "seatle"
这样的语句中不会走索引。而nid和 addr会走索引。
删除办法 (除主键)
drop index_name on table_name;
查看查询
show index from table_name;
注意
列的类型为 blob和text时必须指定长度。两者太长没必要。
create index ix_extra on in1(extra(32));
=====================分割(都是概念)=======================
覆盖索引
覆盖索引时一种概念,指的是在索引时没有进行第二步在数据表中取数据,直接在索引表中取到了。
如 select nid from table_name where nid >10;
由于nid就是主键或者索引,并且取的数据都是索引的值。那程序只要将B-tree的值转化成数据就成。没有第二步步骤。
索引合并
索引合并是在索引过程中,运用到了两列以上作为条件限制。区别于组合索引。
select * from table_name where nid = 23 and name = "ccc";
nid是主键,name是普通索引。这样的索引形式成为索引合并。
那么组合的仍有最左前缀的限制,为什么还存在组合索引?
因为,有种情况是组合索引的最左是根。比如用户名和密码,没有人会脱离用户名去索引密码。
并且,组合索引在这种索引多列的情况下优于索引合并的速率
其他
条件语句
delimiter \\
CREATE PROCEDURE proc_if ()
BEGIN
declare i int default 0;
if i = 1 THEN
SELECT 1;
ELSEIF i = 2 THEN
SELECT 2;
ELSE
SELECT 7;
END IF;
END\\
delimiter ;
循环语句
delimiter \\
CREATE PROCEDURE proc_while ()
BEGIN DECLARE num INT ;
SET num = 0 ;
WHILE num < 10 DO
SELECT
num ;
SET num = num + 1 ;
END WHILE ; END\\
delimiter ;
while do
delimiter \\
CREATE PROCEDURE proc_repeat ()
BEGIN DECLARE i INT ;
SET i = 0 ;
repeat
select i;
set i = i + 1;
until i >= 5
end repeat; END\\
delimiter ;
repeat
delimiter \\
CREATE PROCEDURE proc_loop ()
BEGIN declare i int default 0;
loop_label: loop
select i;
set i=i+1;
if i>=5 then
leave loop_label;
end if;
end loop; END\\
delimiter ;
loop
动态执行SQL语句
# 将传送过来的数据输入某些sql语句
delimiter \\
DROP PROCEDURE IF EXISTS proc_sql \\
CREATE PROCEDURE proc_sql ()
BEGIN
declare p1 int;
set p1 = 11;
set @p1 = p1; PREPARE prod FROM 'select * from tb2 where nid > ?';
EXECUTE prod USING @p1;
DEALLOCATE prepare prod; END\\
delimiter ;
mysql重点--索引的更多相关文章
- MySQL数据库索引之B+树
一.B+树是什么 B+ 树是一种树型数据结构,通常用于数据库和操作系统的文件系统中.B+ 树的特点是能够保持数据稳定有序,其插入与修改操作拥有较稳定的对数时间复杂度.B+ 树元素自底向上插入,这与二叉 ...
- 【mysql】索引原理-MySQL索引原理以及查询优化
转载:https://www.cnblogs.com/bypp/p/7755307.html 一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性 ...
- MySQL学习----索引的使用
一.什么是索引?为什么要建立索引? 索引用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的 ...
- mysql数据库----索引原理与慢查询优化
一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语 ...
- mysql:索引原理与慢查询优化
一 索引的原理 1. 索引原理 索引的目的在于提高查询效率,与我们查阅图书所用的目录是一个道理:先定位到章,然后定位到该章下的一个小节,然后找到页数.相似的例子还有:查字典,查火车车次,飞机航班等 本 ...
- 第二百八十八节,MySQL数据库-索引、limit分页、执行计划、慢日志查询
MySQL数据库-索引.limit分页.执行计划.慢日志查询 索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获 ...
- MySQL单列索引和组合索引的选择效率与explain分析
一.先阐述下单列索引和组合索引的概念: 单列索引:即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引. 组合索引:即一个索包含多个列. 如果我们的查询where条件只有一个,我们完全可 ...
- mysql六:索引原理与慢查询优化
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...
- MySQL的索引(中)
连着发了几天文章,从我收到的反映来说,大家觉着还不错,可以很清晰的看到知识的脉络,但是这个还不错是针对传统的文章的无聊.不明确.完全不考虑考虑用户体验的角度上对比出来的.掌握一门知识还是不容易的,有的 ...
随机推荐
- HDU1853 Cyclic Tour(最小费用最大流)
题目大概说给一张有向图,每条边都有权值,要选若干条边使其形成若干个环且图上各个点都属于且只属于其中一个环,问选的边的最少权值和是多少. 各点出度=入度=1的图是若干个环,考虑用最小费用最大流: 每个点 ...
- 【原】iOS多线程之异步任务+并行队列情况与异步任务+串行队列(主队列)情况
异步任务+并行队列 把异步任务放到并行队列进行执行,异步任务会在不同的线程中执行. /*异步执行+并行队列*/ - (IBAction)clickBasic1:(UIButton *)sender { ...
- [linux]ubuntu 下安装RMySQL包
http://downloads.mysql.com/docs/connector-odbc-en.pdf http://blog.csdn.net/ixidof/article/details/59 ...
- gulp-nodemon 和 gulp-livereload 配置
一.gulp 安装 1. 全局安装: npm install -g gulp 2. 安装在项目开发环境: npm install gulp --save-dev 二.gulp-nodemon 和 gu ...
- ACM: 限时训练题解-Rock-Paper-Scissors-前缀和
Rock-Paper-Scissors Rock-Paper-Scissors is a two-player game, where each player chooses one of Roc ...
- [题解+总结]动态规划大合集II
1.前言 大合集总共14道题,出自江哥之手(这就没什么好戏了),做得让人花枝乱颤.虽说大部分是NOIP难度,也有简单的几道题目,但是还是做的很辛苦,有几道题几乎没思路,下面一道道边看边分析一下. 2. ...
- 【POJ】3648 Wedding
http://poj.org/problem?id=3648 题意:n对人(编号0-n-1,'w'表示第一个人,'h'表示第二个人),每对两个,人坐在桌子两侧.满足:1.每对人中的两个人不能坐在同一侧 ...
- 【Poj】 p2342 Anniversary party(树形DP第一道)
Anniversary party Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5523 Accepted: 3169 ...
- VS2010 C++环境下DLL和LIB文件目录及名称修改
VS2010 C++环境下DLL和LIB文件目录及名称修改 转自:http://blog.csdn.net/archielau/article/details/8507581 DLL工程,Debug版 ...
- 【Go语言】I/O专题
本文目录 1.bytes包:字节切片.Buffer和Reader 1_1.字节切片处理函数 1_1_1.基本处理函数 1_1_2.字节切片比较函数 1_1_3.字节切片前后缀检查函数 1_1_4.字节 ...