首先使用如下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. debug错误总结

    1, 2,就是一个大括号的问题..让你总是得不了满分..明明和别人的代码差不多. 3,就比如P1914,这种藏坑的题,或者说这一类藏坑的题. 坑是什么呢?就是位数不够往后推的时候.. 你不填坑你就得不 ...

  2. git分支相关的命令

    Git 分支管理及结合gitlab的使用 说明有关gitlab的说明及基本操作,请参考:https://blog.51cto.com/wutengfei/2090253使用git分支的作用,我们先来说 ...

  3. YAML_05 定义一个变量创建用户,设置密码

    ansible]# vim user2.yml --- - hosts: cache   remote_user: root   vars:     user: wangwu   tasks:     ...

  4. 洛谷 P1191 矩形 题解

    P1191 矩形 题目描述 给出一个 \(n \times n\)的矩阵,矩阵中,有些格子被染成白色,有些格子被染成黑色,现要求矩阵中白色矩形的数量 输入格式 第一行,一个整数\(n\),表示矩形的大 ...

  5. kubernetes 1.14安装部署ingress

    简单介绍: Ingress是Kubernetes API的标准资源类型之一,它其实就是一组基于DNS名称或URL路径把请求转发至指定的Service资源的规则,用来将集群外部的请求流量转发至集群内部. ...

  6. SignalR简单实用_转自:https://www.cnblogs.com/humble/p/3851205.html

    一.指定通信方式 建立一个通讯方式需要一定的时间和客户机/服务器资源.如果客户机的功能是已知的,那么通信方式在客户端连接开始的时候就可以指定.下面的代码片段演示了使用AJAX长轮询方式来启动一个连接, ...

  7. 五笔字典86版wubi拆字图编码查询

    五笔字典86版 软件能查询以下数据,五笔编码,汉字拆字图,拼音,部首,笔划,笔顺,解释,五笔口诀等等.这些数据只针对单个汉字查询(大概7000字左右).词组查询只支持五笔编码查询(有60000个词组+ ...

  8. legend3---21、查问题或者查插件的时候请搜索对关键词

    legend3---21.查问题或者查插件的时候请搜索对关键词 一.总结 一句话总结: 比如要查移动端的js图片裁剪插件,直接搜就“移动端的js图片裁剪插件” 千万记得问题和找资料都搜索对关键词(搜索 ...

  9. Oracle的存储的三大物理文件

      分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 一. ...

  10. Android分区解释

    让我们从Android手机和平板电脑的标准内存分区列表开始.分区有:/boot/system/recovery/data/cache/misc 此外,有SD卡的分区./sdcard/sd-ext 请注 ...