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重点--索引的更多相关文章

  1. MySQL数据库索引之B+树

    一.B+树是什么 B+ 树是一种树型数据结构,通常用于数据库和操作系统的文件系统中.B+ 树的特点是能够保持数据稳定有序,其插入与修改操作拥有较稳定的对数时间复杂度.B+ 树元素自底向上插入,这与二叉 ...

  2. 【mysql】索引原理-MySQL索引原理以及查询优化

    转载:https://www.cnblogs.com/bypp/p/7755307.html 一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性 ...

  3. MySQL学习----索引的使用

    一.什么是索引?为什么要建立索引? 索引用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的 ...

  4. mysql数据库----索引原理与慢查询优化

    一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语 ...

  5. mysql:索引原理与慢查询优化

    一 索引的原理 1. 索引原理 索引的目的在于提高查询效率,与我们查阅图书所用的目录是一个道理:先定位到章,然后定位到该章下的一个小节,然后找到页数.相似的例子还有:查字典,查火车车次,飞机航班等 本 ...

  6. 第二百八十八节,MySQL数据库-索引、limit分页、执行计划、慢日志查询

    MySQL数据库-索引.limit分页.执行计划.慢日志查询 索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获 ...

  7. MySQL单列索引和组合索引的选择效率与explain分析

    一.先阐述下单列索引和组合索引的概念: 单列索引:即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引. 组合索引:即一个索包含多个列. 如果我们的查询where条件只有一个,我们完全可 ...

  8. mysql六:索引原理与慢查询优化

    一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...

  9. MySQL的索引(中)

    连着发了几天文章,从我收到的反映来说,大家觉着还不错,可以很清晰的看到知识的脉络,但是这个还不错是针对传统的文章的无聊.不明确.完全不考虑考虑用户体验的角度上对比出来的.掌握一门知识还是不容易的,有的 ...

随机推荐

  1. 关于sharedPreferences的使用

    在登录中,android 为什么能够保存上次的登录信息,就是使用了sharedPrerences进行获取和存储 比如记录了之前登录过的用户名.登录时间.登录详情等等

  2. BZOJ4171 : Rhl的游戏

    把第一行每个位置设成未知量,对于之后每一行,都可以用第一行的未知量线性表示. 那么只需要加上最后一行的$m$个方程,对于不能按的那$k$个位置也列出对应的方程. 用高斯消元判断是否有解即可,时间复杂度 ...

  3. Document 按照xml格式输出

    private void GetXMLDocument(Document doc) { OutputFormat format1 = new OutputFormat(" ", t ...

  4. Python for Informatics 第11章 正则表达式一(译)

    注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 目前为止,我们一直在通读文件,查 ...

  5. 优先使用最新版本的IE 和 Chrome 内核 1 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

    兼容模式 优先使用最新版本的IE 和 Chrome 内核 1 <meta http-equiv="X-UA-Compatible" content="IE=edge ...

  6. 20145308刘昊阳 《Java程序设计》第4周学习总结

    20145308刘昊阳 <Java程序设计>第4周学习总结 教材学习内容总结 第六章 继承与多态 6.1 何谓继承 继承:面向对象中,为避免多个类间重复定义共同行为使用 把相同代码提升为父 ...

  7. Sphinx 全量索引加实时索引

    source mysql { type = mysql sql_host = 10.10.3.181 sql_user = root sql_pass = dsideal sql_db = dside ...

  8. jquery自己手写表单验证

    <script type="text/javascript"  src="../jquery-1.8.3.js"></script> / ...

  9. GO语言练习:构建json 和 解析JSON 实例

    本文介绍如何使用Go语言自带的库把对象转换为JSON格式,并在channel中进行传输后,并把JSON格式的信息转换回对象. 1.Go语言的JSON 库 Go语言自带的JSON转换库为 encodin ...

  10. mongodb数据导入导出以及备份恢复

    昨日在公司收到游戏方发来一个1G多的数据文件,要求导入联运账号中.细细一看,纳尼!文件竟然是BSON格式. 哇塞,这不是去年给大家分享的NoSql中的MongoDB的备份文件吗? 于是搭好环境 1.启 ...