什么是聚簇索引

聚簇索引:索引的叶节点就是数据节点(索引值)。而非聚簇索引的叶节点仍然是索引节点(告诉你怎么在表中查找这一记录),只不过有一个指针指向对应的数据块。

Innodb和MyIsam区别

转载自 (https://www.zhihu.com/question/20596402)

  1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;
  2. InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;
  3. InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
  4. InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
  5. 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笔记-索引的更多相关文章

  1. 高性能Mysql笔记 — 索引

    index优化 对于频繁作为查询条件的字段使用索引 注意索引字段类型的隐式转换,数据库类型和应用类型要一致 索引的种类 唯一索引,成为索引的列不能重复 单列索引,一个索引只包含一列 单列前缀索引,有些 ...

  2. mysql笔记——索引

    什么是索引? 数据库中的一个对象. 在数据库中用来加速表的查询. 通过使用快速路径访问方法定位数据,减少了磁盘的i/o. 与表分别独立存放,但不能独立存在,必须属于某个表. 由数据库自动维护,表被删除 ...

  3. 高性能MySQL笔记 第5章 创建高性能的索引

    索引(index),在MySQL中也被叫做键(key),是存储引擎用于快速找到记录的一种数据结构.索引优化是对查询性能优化最有效的手段.   5.1 索引基础   索引的类型   索引是在存储引擎层而 ...

  4. mysql笔记02 创建高性能的索引

    创建高性能的索引 1. 索引(在MySQL中也叫做"键(key)")是存储引擎用于快速找到记录的一种数据结构. 2. 索引可以包含一个或多个列的值.如果索引包含多个列,那么列的顺序 ...

  5. Mysql学习笔记—索引

    一.什么是索引 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 在数据 ...

  6. MySQL笔记(8)-- 索引类型

    一.背景 前面我们讲了SQL分析和索引优化都涉及到了索引,那么什么是索引,它的模型有什么,实现的机制是什么,今天我们来好好讨论下. 二.索引的介绍 索引就相当书的目录,比如一本500页的书,如果你想快 ...

  7. MySQL笔记汇总

    [目录] MySQL笔记汇总 一.mysql简介 数据简介 结构化查询语言 二.mysql命令行操作 三.数据库(表)更改 表相关 字段相关 索引相关 表引擎操作 四.数据库类型 数字型 字符串型 日 ...

  8. 小白学习mysql之索引初步

    导语 索引在数据库中的地位是及其的重要,同时要想完全的掌握索引并不是一件容易的事,需要对数据的查询原理以及计算机操作系统有深刻的认识,当然相关的算法和数据结构也是必须的.因此,这篇文章感到了一些压力, ...

  9. 涂抹mysql笔记-数据库中的权限体系

    涂抹mysql笔记-数据库中的权限体系<>能不能连接,主机名是否匹配.登陆使用的用户名和密码是否正确.mysql验证用户需要检查3项值:用户名.密码和主机来源(user.password. ...

随机推荐

  1. 返回结点值为e的二叉树指针

    题意为,如果二叉树某结点的值为e(假定是整型二叉树),返回这个结点的指针.初看这道题,联想到二叉树可以很简单的遍历,直接返回这个指针不就行了吗?如下图所示,假如要返回值为3的结点指针: 设计好了一个函 ...

  2. kepware http接口 nodejs开发

    读取某变量的值(native var http = require("http"); var options = { "method": "GET&q ...

  3. 20155326 2016-2017-2 《Java程序设计》第6周学习总结

    20155326 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 InputStream与OutputStream: 串流设计的概念 (1)Java将输入/输 ...

  4. jQuery插件初级练习2

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  5. Delphi FastReport报表常用方法

    Delphi FastReport报表常用方法   作者及来源: EasyPass - 博客园    收藏到→_→:   摘要: Delphi FastReport报表常用方法       点击这里! ...

  6. SQL Server 字符串拼接、读取

    一.查询结果使用,字符串拼接 declare @names nvarchar(1000) declare @ParmDefinition nvarchar(1000) declare @sqltext ...

  7. 自定义延时关闭弹窗,替代MesssageBox

    1,新建一个窗体MessageForm,在里面加一个label控件和timer 2,代码如下: public partial class MessageForm : Form { int t; str ...

  8. python项目飞机大战

    实现步骤 1.创建窗口 2.创建一个玩家飞机,按方向键可以左右移动 3.给玩家飞机添加按空格键发射子弹功能 4.创建一个敌机 5.敌机自动左右移动 6.敌机自动发射子弹 1.创建窗口 import p ...

  9. Linux Shell常用脚本整理

    轮询检测Apache状态并启用钉钉报警◆ #!/bin/bash shell_user="root" shell_domain="apache" shell_l ...

  10. BZOJ2178: 圆的面积并(格林公式)

    题面 传送门 题解 好神仙-- 先给几个定义 平面单连通区域:设\(D\)是平面内一区域,若属于\(D\)内任一简单闭曲线的内部都属于\(D\),则称\(D\)为单连通区域.通俗地说,单连通区域是没有 ...