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 ;

循环语句

动态执行SQL语句

# 将传送过来的数据输入某些sql语句中。

 动态执行SQL

时间: 2024-08-10 03:11:12

mysql重点--索引的相关文章

mysql之索引原理与慢查询优化

一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重.说起加速查询,就不得不提到索引了. 2.为什么要有索引呢? 索引在MySQL中也叫做"键",是存储引擎用于快速找到记录的一种数据结构.索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要.索引优化应该是对查询性能优化最有效的手段了.

MySQL六:索引原理与慢查询优化

阅读目录 一 介绍 二 索引的原理 三 索引的数据结构 三 MySQL索引管理 四 测试索引 五 正确使用索引 六 查询优化神器-explain 七 慢查询优化的基本步骤 八 慢日志管理 九 参考博客 一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重.说起加速查询,就不得不提到索引了. 什么是索引? 索引在MySQL中也叫做"

MySQL查询索引的正确使用

索引是提高查询速度的最重要的工具.当然还有其它的一些技术可供使用,但是一般来说引起最大性能差异的都是索引的正确使用.在MySQL邮件列表中,人们经常询问那些让查询运行得更快的方法.在大多数情况下,我们应该怀疑数据表上有没有索引,并且通常在添加索引之后立即解决了问题.当然,并不总是这样简单就可以解决问题的,因为优化技术本来就并非总是简单的.然而,如果没有使用索引,在很多情况下,你试图使用其它的方法来提高性能都是在浪费时间.首先使用索引来获取最大的性能提高,接着再看其它的技术是否有用. 这一部分讲述

十、mysql之索引原理与慢查询优化

mysql之索引原理与慢查询优化 一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重.说起加速查询,就不得不提到索引了. 2.为什么要有索引呢? 索引在MySQL中也叫做"键",是存储引擎用于快速找到记录的一种数据结构.索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要.索引优化应

联合分组、子查询、视图、事务、python操作mysql、索引

目录 联合分组.子查询.视图.事务.python操作mysql.索引 一.联合分组 二.子查询 三.all 与any:区间修饰条件 四.视图:view 视图的增删改 五.事务 5.1.事务的概念 5.2.事务的四大特性 六.pymysql 模块:python操作mysql 6.1 安装pymysql 模块 6.2 python用pymysql 操作mysql步骤 6.3 游标操作 6.4 pymysql事务 6.5 sql注入 七.索引 联合分组.子查询.视图.事务.python操作mysql.

Mysql数据库索引

索引(Index)是帮助mysql高效获取数据的数据结构.对于高性能非常关键. 索引的重要性主要体现在数据量非常大的时候.规模小,负载轻的数据库即使没有索引也可以获到好的查询效果 例如: 1 mysql>select first_name from actor where actor_id=5; 改索引列位于actor_id列,因此mysql会使用索引找到actor_id为5的行. 索引有很多种类型,各自有各自的特点.索引实在存储引擎层实现的,而不是服务器层. (1).B-Tree索引 谈论引擎

第二百八十八节,MySQL数据库-索引

MySQL数据库-索引 索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取即可. 如果没有创建索引查找数据时,是全表扫描的,也就是向查字典一样没有目录,靠一页一页的翻到目标数据位置,这样如果数据量大会相当耗时, 索引就是快速帮助用户找到目标数据,节省时间 索引简介 索引是以B+tree方式的树形结构存放数据的 详情,可以网上搜索一下B+tree MySQL中常见索引有: 普通索引 唯一索引 主键索引 组合索

关于mysql的索引

我们先来了解MYSQL索引的概念: 索引是一种特殊的文件,他们包含着对数据表里所有记录的引用指针.更通俗地说,数据库索引好比是是一本书前面的目录,能加快数据库的查询速度,我们有了相应的索引后,数据库会直接在索引中查找符合条件的选项.索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了,聚簇索引能提高多行检索的速度,而非聚簇索引对单行的检索很快. mysql主要有两种结构:B+树和hash hash索引在mysql中较少用,它以把数据的索引以hash形

MySQL之索引

要理解 mysql中索引是如何工作,最简单的方法就是看看一本书的"索引"部分(即目录).然后通过索引找到指定的页码. 在mysql中,存储引擎用类似的方法使用索引,首先在索引中找到对应值,然后根据匹配的索引记录找到对应的数据行. 在mysql中,索引是在存储引擎层而不是服务器层实现的. 索引的优点: 索引可以让服务器快速定位到表的指定位置,但这并不是索引的唯一作用,到目前为止可以看到,根据索引的数据结构不同, 索引页有一些附加作用. 最常见的b-tree索引,按照顺序存储数据,所以my