文档章节

mysql索引分析

五大三粗
 五大三粗
发布于 2015/05/03 14:01
字数 442
阅读 19
收藏 0
点赞 0
评论 0

创建2张用户表user、user2,表结构相同,但user表使用InnoDB存储引擎,而user2表则使用 MyISAM存储引擎。

复制代码
-- Table "user" DDL CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `email` varchar(100) DEFAULT NULL,
  `age` tinyint(4) DEFAULT NULL,
  `nickname` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), KEY `name` (`name`), KEY `age` (`age`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- Table "user2" DDL CREATE TABLE `user2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `email` varchar(100) DEFAULT NULL,
  `age` tinyint(4) DEFAULT NULL,
  `nickname` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), KEY `name` (`name`), KEY `age` (`age`)
) ENGINE=MyISAM AUTO_INCREMENT=131610 DEFAULT CHARSET=utf8;
复制代码

分别插入10W条测试数据到表user & user2。

复制代码
<?php $example = array( '@qq.com', 
    '@sina.com.cn', 
    '@163.com',
    '@126.com',
    '@gmail.com',
    '@yahoo.com',
    '@live.com',
    '@msn.com',
    '@cisco.com',
    '@microsoft.com',
    '@ibm.com',
    '@apple.com'); $con = mysql_connect("localhost", "root", "your_mysql_password"); mysql_select_db("index_test", $con); //添加10W测试数据到表 user & user2 for($i=0; $i<100000; $i++)
{ $temp = md5(uniqid()); $name = substr($temp, 0, 16); $email = substr($temp, 8, 12).$example[array_rand($example, 1)]; $age = rand(18, 99); $nickname = substr($temp, 16, 16); mysql_query("INSERT INTO user(name,email,age,nickname) VALUES('$name','$email',$age,'$nickname')"); mysql_query("INSERT INTO user2(name,email,age,nickname) VALUES('$name','$email',$age,'$nickname')");
} mysql_close($con); echo 'success'; ?>
复制代码

 

对索引的使用分析

Explain Select * from user where id>100 \G;

图1

Explain Select * from user2 where id>100 \G;

图2

User 表中的数据和 User2 表中的数据是一样的,索引结构也是一样的,只不过它们的存储引擎不同。在图1中,查询用到了PRIMARY主键索引,而查询优化器预估的结果大概在65954行左右(实际是131513);在图2中,查询却没有使用索引,而是全表扫描了,返回的预估结果在131608行(实际是131509)。

Explain Select * from user where id>100 and age>50 \G;

图3

Explain Select * from user where id>100 and age=50 \G;

图4

Explain Select * from user2 where id>100 and age>50 \G;

图5

Explain Select * from user2 where id>100 and age=50 \G;

图6

© 著作权归作者所有

共有 人打赏支持
五大三粗
粉丝 155
博文 892
码字总数 4545120
作品 0
广州
程序员
MySQL 索引选择原则分析(二)

2:MySQL索引选择规则(唯一索引查询) studentsorigin表中只有主键,没有建立索引。 select id, name from studentsorigin; 根据MySQL 索引选择原则分析(一)2.1来分析,所以只能是全表扫描...

tara_qri ⋅ 2015/10/14 ⋅ 0

MySQL 索引选择原则

目的 MySQL查询优化器是基于代价(cost-based)的查询方式。因此,在查询过程中,最重要的一部分是根据查询的SQL语句,依据多种索引,计算查询需要的代价,从而选择最优的索引方式生成查询计...

tara_qri ⋅ 2015/09/24 ⋅ 0

MySQL 索引选择原则

MySQL 索引选择原则 2012-08-27 22:19:12 分类: Mysql/postgreSQL 目的 MySQL查询优化器是基于代价(cost-based)的查询方式。因此,在查询过程中,最重要的一部分是根据查询的SQL语句,依据...

我是小强 ⋅ 2013/12/06 ⋅ 0

MySQL 索引选择原则

目的 MySQL查询优化器是基于代价(cost-based)的查询方式。因此,在查询过程中,最重要的一部分是根据查询的SQL语句,依据多种索引,计算查询需要的代价,从而选择最优的索引方式生成查询计...

真爱2015 ⋅ 2015/12/07 ⋅ 0

MySQL 索引选择原则分析(示例库)

目的 数据库中很重要的设计一部分,莫过于索引了。B+树索引是MySQL中设计的索引。B+树索引是基于B+树基础发展而来的。 前面文章MySQL 索引选择原则分析(一)已经对索引做进一步分析。但是实...

tara_qri ⋅ 2015/10/18 ⋅ 0

MySql性能加速分析以及PHPMYADMIN中explain用法

现在和大家分享下如何对MySql性能加速分析以及PHPMYADMIN中explain用法的分析。 1 使用explain语句去查看分析结果,如 explain select * from test1 where id=1; 会出现: id selecttype ta...

prestashop ⋅ 2012/08/21 ⋅ 0

性能优化案例分析之一:软删除是慢查询的罪魁祸首?

背景 在Rails项目里面,为了实现软删除,我们经常会使用 actsasparanoid 这个gem。它会给数据库表添加一个deletedat栏位,当删除数据时给这个栏位设置当前时间,查询数据时由于设置了 defaul...

quakewang ⋅ 2017/11/08 ⋅ 0

MySQL · 源码分析 · 一条insert语句的执行过程

本文只分析了insert语句执行的主路径,和路径上部分关键函数,很多细节没有深入,留给读者继续分析 create table t1(id int); insert into t1 values(1) 略过建立连接,从 mysql_parse() 开始...

阿里云RDS-数据库内核组 ⋅ 2017/09/09 ⋅ 0

十、MySQL的SQL优化之定位SQL的问题 - 系统的撸一遍MySQL

找出SQL慢的原因 谈到MySQL不得不说的就是大家都会遇到的性能问题,今天就记录一下SQL优化相关的技巧。 检查MySQL状态 通过检查SQL语句的状态有助于MySQL的优化,首先介绍 show status命令 ...

logbird ⋅ 2016/11/04 ⋅ 0

课程「性能优化之MySQL优化」的复习笔记

可以进行优化的层面 硬件 系统配置 数据库表结构 SQL 语句和索引 进行优化前的数据准备 打开以下链接下载数据 打开终端,执行以下命令 SQL 语句和索引 MySQL 慢查询日志 如何发现有问题的 SQ...

javaer ⋅ 2016/11/04 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MySQL 数据库设计总结

规则1:一般情况可以选择MyISAM存储引擎,如果需要事务支持必须使用InnoDB存储引擎。 注意:MyISAM存储引擎 B-tree索引有一个很大的限制:参与一个索引的所有字段的长度之和不能超过1000字节...

OSC_cnhwTY ⋅ 今天 ⋅ 0

多线程(四)

线程池和Exector框架 什么是线程池? 降低资源的消耗 提高响应速度,任务:T1创建线程时间,T2任务执行时间,T3线程销毁时间,线程池没有或者减少T1和T3 提高线程的可管理性。 线程池要做些什...

这很耳东先生 ⋅ 今天 ⋅ 0

使用SpringMVC的@Validated注解验证

1、SpringMVC验证@Validated的使用 第一步:编写国际化消息资源文件 编写国际化消息资源ValidatedMessage.properties文件主要是用来显示错误的消息定制 [java] view plain copy edit.userna...

瑟青豆 ⋅ 今天 ⋅ 0

19.压缩工具gzip bzip2 xz

6月22日任务 6.1 压缩打包介绍 6.2 gzip压缩工具 6.3 bzip2压缩工具 6.4 xz压缩工具 6.1 压缩打包介绍: linux中常见的一些压缩文件 .zip .gz .bz2 .xz .tar .gz .tar .bz2 .tar.xz 建立一些文...

王鑫linux ⋅ 今天 ⋅ 0

6. Shell 函数 和 定向输出

Shell 常用函数 简洁:目前没怎么在Shell 脚本中使用过函数,哈哈,不过,以后可能会用。就像java8的函数式编程,以后获取会用吧,行吧,那咱们简单的看一下具体的使用 Shell函数格式 linux ...

AHUSKY ⋅ 今天 ⋅ 0

单片机软件定时器

之前写了一个软件定时器,发现不够优化,和友好,现在重写了 soft_timer.h #ifndef _SOFT_TIMER_H_#define _SOFT_TIMER_H_#include "sys.h"typedef void (*timer_callback_function)(vo...

猎人嘻嘻哈哈的 ⋅ 今天 ⋅ 0

好的资料搜说引擎

鸠摩搜书 简介:鸠摩搜书是一个电子书搜索引擎。它汇集了多个网盘和电子书平台的资源,真所谓大而全。而且它还支持筛选txt,pdf,mobi,epub、azw3格式文件。还显示来自不同网站的资源。对了,...

乔三爷 ⋅ 今天 ⋅ 0

Debian下安装PostgreSQL的表分区插件pg_pathman

先安装基础的编译环境 apt-get install build-essential libssl1.0-dev libkrb5-dev 将pg的bin目录加入环境变量,主要是要使用 pg_config export PATH=$PATH:/usr/lib/postgresql/10/bin 进......

玛雅牛 ⋅ 今天 ⋅ 0

inno安装

#define MyAppName "HoldChipEngin" #define MyAppVersion "1.0" #define MyAppPublisher "Hold Chip, Inc." #define MyAppURL "http://www.holdchip.com/" #define MyAppExeName "HoldChipE......

backtrackx ⋅ 今天 ⋅ 0

Linux(CentOS)下配置php运行环境及nginx解析php

【part1:搭建php环境】 1.选在自己需要安装的安装包版本,wget命令下载到服务器响应目录 http://php.net/releases/ 2.解压安装包 tar zxf php-x.x.x 3.cd到解压目录执行如下操作 cd ../php-...

硅谷课堂 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部