什么是聚簇索引

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

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. text 文本。

    //支持转义符"\".   <text/> 组件内只支持 <text/> 嵌套. //除了文本节点以外的其他节点都无法长按选中. <view clas ...

  2. Jmeter-连接 MySQL数据库

    一.下载mysql驱动包,mysql各个版本驱动包如下: http://central.maven.org/maven2/mysql/mysql-connector-java/ (上面链接的信息来源于 ...

  3. JDBC架构

    JDBC API支持两层和三层处理模型进行数据库访问,但在一般的JDBC体系结构由两层组成: JDBC API: 提供了应用程序对JDBC的管理连接. JDBC Driver API: 支持JDBC管 ...

  4. POJ3020 Antenna Placement

    Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9586   Accepted: 4736 ...

  5. 《计算机科学基础》学习笔记_Part 1 Computer and Data

    Technorati Tags: 计算机科学基础,读书笔记 Chapter 1. Introduction Ø  计算机:黑盒,Output Data=f(Input Data, Program) Ø ...

  6. 牛客网2018暑期训练 第三场 a题

    #include <bits/stdc++.h> using namespace std; vector<int> path; ; short dp[maxn][maxn][m ...

  7. hive 实现类似 contain 包含查询

    如何用hive sql 实现 contain 查询? 需求:判断某个字符串是否在另一个字符串中? 方法: 可以自定义函数,但是用正则匹配regexp更方便 代码如下: 首先,查看regexp正则函数的 ...

  8. 在Delphi中处理word文档与数据库的互联 1

    在Delphi中处理word文档与数据库的互联 ---- 目前,Delphi被越来越多的人选中作为MIS系统开发中的前台工具.在以Delphi为前台,一些大型数据库为后台的MIS系统中,图形的处理不可 ...

  9. YOLO end-to-end

    1.YOLO: You Only Look Once:Unified, Real-Time Object Detection YOLO是一个可以一次性预测多个Box位置和类别的卷积神经网络,能够实现端 ...

  10. js gettext

    test.php 1 <?php $locale='zh_CN'; if(isSet($_GET["locale"]))$locale = $_GET["local ...