首先使用如下node.js脚本创建两张表,并为这两张表各自生成10000条数据:

var fs = require('fs');

var nameS = "赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮卞齐康";

var sql, content = "";
// drop table
sql = "drop table if exists my_test_table1;";
content += sql + "\r\n";
sql = "drop table if exists my_test_table2;";
content += sql + "\r\n";
// create table
sql = "create table my_test_table1 ( id integer, name varchar(10), age integer, address varchar(100) );";
content += sql + "\r\n";
sql = "create table my_test_table2 ( id integer, name varchar(10), age integer, address varchar(100) );";
content += sql + "\r\n";
// insert
for (var i = 1; i <= 10000; i ++) {
var id = i;
var name = nameS[i%nameS.length] + nameS[(i+10)%nameS.length] + nameS[(i+20)%nameS.length] + nameS[(i+30)%nameS.length];
var age = parseInt(Math.random() * 100);
var address = nameS[parseInt(Math.random()*nameS.length)] + nameS[parseInt(Math.random()*nameS.length)] + nameS[parseInt(Math.random()*nameS.length)] +
nameS[parseInt(Math.random()*nameS.length)] + nameS[parseInt(Math.random()*nameS.length)] + parseInt(Math.random()*1e5) + "号";
for (var j = 1; j <= 2; j ++) {
sql = `insert into my_test_table${j} (id,name,age,address) values (${id},'${name}',${age},'${address}');`;
content += sql + "\r\n";
}
}
fs.writeFileSync('./init.sql', content);

我们测试用的几个select语句如下:

sql1:

select * from my_test_table1 a left join my_test_table2 b on a.id=b.id

sql2:

select * from my_test_table1 a left join my_test_table2 b on a.id=b.id left join my_test_table1 c on a.id=b.id and b.id=c.id

sql3:

select * from my_test_table1 a left join my_test_table2 b on a.id=b.id left join my_test_table1 c on a.id=b.id and b.id=c.id left join my_test_table2 d on a.id=d.id and b.id=d.id and c.id=d.id

插入数据后,我们来进行一般的查询。

查询耗时:

  • sql1: 8.488s,8.581s,8.626s
  • sql2: 26.48s,26.30s,26.651s
  • sql3: 52.645s,53.510s,53.57s

为两张表的id字段添加索引,然后再进行一次查询:

create index my_test_table1_idx_1 on my_test_table1 (id);
create index my_test_table2_idx_1 on my_test_table2 (id);

添加索引后的查询耗时:

  • sql1: 51ms,50ms,40ms
  • sql2: 80ms,100ms,140ms
  • sql3: 203ms,166ms,100ms

可以看到,速度达到了飞速的提升!

MySQL普通索引性能试验的更多相关文章

  1. 【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引

    本文地址 分享提纲: 1.为查询缓存优化你的查询 2. EXPLAIN 你的 SELECT 查询 3. 当只要一行数据时使用 LIMIT 1 4. 为搜索字段建索引 5. 在Join表的时候使用相当类 ...

  2. mysql的limit性能,数据库索引问题,dblog问题

    mysql的limit性能,数据库索引问题,dblog问题,redis学习 继续学习. dblog实际上是把日志记录在另一个数据库里面. 问题1: 一张表定义了5个索引,但是sql语句中用到了3个有索 ...

  3. paip.提升性能--- mysql 建立索引 删除索引 很慢的解决.

    paip.提升性能--- mysql 建立索引 删除索引 很慢的解决. 作者Attilax ,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blo ...

  4. SQL优化 MySQL版 - 索引分类、创建方式、删除索引、查看索引、SQL性能问题

    SQL优化 MySQL版  - 索引分类.创建方式.删除索引.查看索引.SQL性能问题 作者 Stanley 罗昊 [转载请注明出处和署名,谢谢!] 索引分类 单值索引 单的意思就是单列的值,比如说有 ...

  5. ySQL性能优化的21个最佳实践 和 mysql使用索引

    MySQL性能优化的21个最佳实践 和 mysql使用索引 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 ...

  6. 【转】【备忘录】MySQL性能优化的21个最佳实践 和 mysql使用索引

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数 ...

  7. MySQL 索引性能分析概要

    上一篇文章 MySQL 索引设计概要 介绍了影响索引设计的几大因素,包括过滤因子.索引片的宽窄与大小以及匹配列和过滤列.在文章的后半部分介绍了 数据库索引设计与优化 一书中,理想的三星索引的设计流程和 ...

  8. MySQL性能优化的21个最佳实践 和 mysql使用索引【转载】

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数 ...

  9. mysql索引性能验证,高性能的索引策略

    索引性能验证 1.无索引列的查询 在where条件中查询没有添加索引的列,性能会比较差.我们可以先在sqlyog中打开表t_user的数据,然后复制一个名字出来进行查询. /*无索引列的查询,索引不会 ...

随机推荐

  1. LightOJ - 1369 - Answering Queries(规律)

    链接: https://vjudge.net/problem/LightOJ-1369 题意: The problem you need to solve here is pretty simple. ...

  2. Python3学习(一)

    基本语法 python3不向下兼容,有些语法跟python2.x不一样,IDLE shell编辑器,快捷键:ALT+p,上一个历史输入内容,ALT+n 下一个历史输入内容.#idle中按F5可以运行代 ...

  3. IDEA的安装和使用

    IDEA的特色功能 IDEA所提倡的是智能编码,是减少程序员的工作,IDEA的特色功能有以下22点 [1]  : ● 智能的选取 在很多时候我们要选取某个方法,或某个循环或想一步一步从一个变量到整个类 ...

  4. RMQ--树状数组,ST表,线段树

    RMQ Range Minimum/Maximum Query 区间最值问题 树状数组 https://www.cnblogs.com/xenny/p/9739600.html lowbit(x) x ...

  5. Kylin 架构模块简介

    Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc. 开发并贡献至开源社区.它能 ...

  6. 【angularJS】学习笔记

    一.一个html中多个ng-app //对于ng-app初始化一个AngularJS程序属性的使用需要注意,在一个页面中AngularJS自动加载第一个ng-app,其他ng-app会忽略 //如果需 ...

  7. CSS滑动门

    如下图所示,每个导航栏目的文字个数不一样多,有的长,有的短,如何用一张背景图片,适应不同字数”的导航条,“滑动门”设计的非常巧妙,采用两个相同的背景图像,一左一右,一个负责提供左边框,一个负责提供右边 ...

  8. 99: AGC-018C 堆+思维

    $des$有 $X + Y + Z$ 个人,第 $i$ 个人有 $A_i$ 个金币,$B_i$ 个银币,$C_i$ 个铜币.选出 $X$ 个人获得其金币,选出 $Y$ 个人获得其银币,选出 $Z$ 个 ...

  9. 洛谷P1040 加分二叉树题解

    dp即可 \(f[i][j]\)表示i到j的加分 相当于区间dp了 #include<cstdio> using namespace std; int v[50]; int f[55][5 ...

  10. 《挑战30天C++入门极限》C++的iostream标准库介绍(3)

        C++的iostream标准库介绍(3) C语言提供了格式化输入输出的方法,C++也同样,但是C++的控制符使用起来更为简单方便,在c++下有两中方法控制格式化输入输出. 1.有流对象的成员函 ...