tidb vs mysql_一个长耗时SQL在TiDB和Mysql上的耗时测试

之前看到的TiDB和MySql的性能对比都是大量短耗时请求下的压测,单机情况下TiDB和MySql的确有些差距,不过笔者最近碰到的场景更多是sql要扫描的行数不小的情况下单sql比较耗时的问题,所以自己做了个简单测试这类型sql的耗时。

TiDB单机环境部署

git clone https://github.com/pingcap/tidb-docker-compose.git # 下载

cd tidb-docker-compose && docker-compose pull # 拉取镜像

docker-compose up -d # 启动

命令行客户端连接方式

mysql -h 127.0.0.1 -P 4000 -u root

测试

表结构

create table testTable (

`id` int(10) unsigned auto_increment primary key,

`uid` int(10) not null default 0,

`day` int(6) not null default 0,

`field1` varchar(16) not null default '',

`field2` tinyint(3) not null default 0,

`field3` tinyint(3) not null default 0,

`field4` tinyint(3) not null default 0,

`field5` varchar(32) not null default '',

`field6` varchar(32) not null default '',

`field7` varchar(32) not null default '',

key `uid_day_idx` (`uid`,`day`,`field1`, `field3`)

) engine=InnoDB default charset=utf8;

插入数据

5000个随机的uid

day 平均分布在20190801~20190830

filed1 随机取'a0' ~ 'a9'

field3 随机取0~10

插入数据脚本

$maxRecordNum = 10000000;

$tableName = 'testTable';

$host = '127.0.0.1';

$port = '4000';

$dbname = 'test';

$username = 'root';

$password = '';

$dsn = "mysql:host={$host};dbname={$dbname};port={$port}";

function getDay($maxRecordNum, $i) {

$item = (int)($maxRecordNum / 30);

$day = 20190801;

$add = (int)($i/ $item);

return $day + $add;

}

function getRandomFieldOne() {

static $fieldsOne = [

"'a0'", "'a1'", "'a2'", "'a3'", "'a4'", "'a5'", "'a6'", "'a7'", "'a8'", "'a9'",

];

return $fieldsOne[rand(0, count($fieldsOne) -1)];

}

function getRandomFieldTwo() {

return rand(0, 1);

}

function getRandomFieldThree() {

return rand(0, 10);

}

function getRandomFieldFour() {

return rand(0, 8);

}

function generateRecordsValue($day) {

$minUid = 200000000;

$maxUid = $minUid + 5000;

$arrRecord = [

'uid' => rand($minUid, $maxUid),

'day' => $day,

'field1' => getRandomFieldOne(),

'field2' => getRandomFieldTwo(),

'field3' => getRandomFieldThree(),

'field4' => getRandomFieldFour(),

'field5' => "'static'",

'field6' => "'static'",

'field7' => "'static'",

];

return $arrRecord;

}

try {

$db = new PDO($dsn, $username, $password);

$db->query("truncate {$tableName};");

$db->query("alter table {$tableName} AUTO_INCREMENT=1;");

$arr = [];

for ($i = 1; $i <= $maxRecordNum; $i++) {

$day = getDay($maxRecordNum, $i);

$arr[] = '(' . implode(',', generateRecordsValue($day)) . ')';

if ($i % 10000 === 0) {

$sql = "INSERT INTO {$tableName} (" . implode(',', array_keys(generateRecordsValue(0))) . ") values" . implode(',', $arr) .';';

$res = $db->query($sql);

$arr = [];

sleep(1);

echo "{$i}\n";

}

}

} catch (Exception $e) {

echo $e->getMessage();

}

测试sql脚本

查询15天范围内, 2000个uid, 附带两个字段条件

$tableName = 'testTable';

$host = '127.0.0.1';

$dbname = 'test';

$username = 'root';

$port = '4000';

$password = '';

//$port = '3306';

//$password = 'guapi123';

$dsn = "mysql:host={$host};dbname={$dbname};port={$port}";

try {

$db = new PDO($dsn, $username, $password);

$arrUid = [];

$minUid = 200000000;

for ($i = 0; $i < 2000; $i++) {

$arrUid[] = $minUid + $i;

}

$total = 0;

for ($i = 0; $i < 15; $i++) {

$startDay = 20190801 + $i;

$endDay = $startDay + 14;

$sql = "select field4 from {$tableName} where uid in (" . implode(',', $arrUid) . ") and day >= {$startDay} and day<={$endDay} and field1 = 'a0' and field3 in (3, 5);";

$startTime = microtime(true);

$res = $db->query($sql);

$endTime = microtime(true);

$cost = (int)(($endTime - $startTime) * 1000);

echo "cost:{$cost}ms\n";

$total += $cost;

}

echo "avg cost:" . (int)($total / 15) . "ms\n";

} catch (Exception $e) {

echo $e->getMessage();

}

测试结果(Mysql和TiDB缓存策略都是默认配置)

TiDB

cost:1744ms

cost:646ms

cost:720ms

cost:614ms

cost:644ms

cost:659ms

cost:662ms

cost:731ms

cost:728ms

cost:669ms

cost:816ms

cost:682ms

cost:778ms

cost:857ms

cost:718ms

avg cost:777ms

Mysql

cost:5256ms

cost:5165ms

cost:5300ms

cost:5461ms

cost:5376ms

cost:5334ms

cost:5435ms

cost:5339ms

cost:5314ms

cost:5278ms

cost:5346ms

cost:5244ms

cost:5387ms

cost:5497ms

cost:5633ms

avg cost:5357ms

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle存储过程(转)

存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它; 行2: IS关键词表明后面将跟随一个PL/SQL体。 行3: BEGIN关键词表明…

win10 python 调用模块_python常识系列14--gt;python通过jpype模块调用jar包

前言能坚持一件事&#xff0c;本身就是一种很了不起的才华。一、jpype模块是什么&#xff1f;能够让 python 代码方便地调用 Java 代码的工具二、jpype模块安装安装和其它模块没区别&#xff0c;但是注意模块名 是 jpype1 &#xff0c;后面有个1pip install jpype1三、jpype模块…

js 定时器

Document自带的方法&#xff1a; 循环执行&#xff1a;var timeid window.setInterval&#xff08;“方法名或方法”&#xff0c;“延时”&#xff09;;window.clearInterval(timeid); 定时执行&#xff1a;var tmid window.setTimeout(“方法名或方法”, “延时”);window.c…

mysql 载入主体时出错_mysql遇到load data导入文件数据出现1290错误的解决方案

错误出现情景在cmd中使用mysql命令&#xff0c;学生信息表添加数据。使用load data方式简单批量导入数据。准备好文本数据&#xff1a; xueshengxinxi.txt 文件 数据之间以tab键进行分割执行 “load data infile 文本数据路径 into table tab_load_data” 弹出错误。#load d…

JavaScript快速入门(四)——JavaScript函数

函数声明 之前说的三种函数声明中&#xff08;参见JavaScript快速入门&#xff08;二&#xff09;——JavaScript变量&#xff09;&#xff0c;使用Function构造函数的声明方法比较少见&#xff0c;我们暂时不提。function func() { }和var func function() { }除了在声明提升…

mysql 5.6 ibdata1_mysql 里的 ibdata1 文件不断的增长?

我们在 Percona 支持栏目经常收到关于 MySQL 的 ibdata1 文件的这个问题。当监控服务器发送一个关于 MySQL 服务器存储的报警时&#xff0c;恐慌就开始了 —— 就是说磁盘快要满了。一番调查后你意识到大多数地盘空间被 InnoDB 的共享表空间 ibdata1 使用。而你已经启用了 inno…

HashMap解读

hashcode()方法和equals()方法。使用这两个方法&#xff0c;一个对象能够存储或从一个Hashtable&#xff0c;HashMap&#xff0c;HashSet 被检索。 hashcode(): This method is used to get unique integer for given object. This integer is used to find bucket when storin…

mysql查询两个小时前的数据_ORACEL数据库获取两个时间之前的小时数

一、获取两个时间之前的小时数select ceil((To_date(2008-05-01 02:00:00 , yyyy-mm-dd hh24-mi-ss) - To_date(2008-04-30 23:59:59 , yyyy-mm-dd hh24-mi-ss)) * 24 ) 在厂小时数 FROM SCM_GDHJLD2二、截取字符串select substr(DIAODAOJIAOWANSHIJIAN,1,18) from SCM_GDHJLD2…

windows下git bash乱码问题

1,/etc/gitconfig&#xff1a; [gui]encoding utf-8 #代码库统一用urf-8,在git gui中可以正常显示中文 [i18n]commitencoding GB2312 #log编码&#xff0c;window下默认gb2312,声明后发到服务器才不会乱码 [svn]pathnameencoding GB2312 #支持中文路径 2,/etc/git-completio…

redmine两个mysql_Redmine3.4.2安装记(Win10+MySql)

一、准备工具二、安装安装railsinstaller-3.3.0.exe&#xff0c;解压redmine-3.4.2.zip到Sites目录下(默认在系统盘C:\下)创建空数据库和用于访问redmine数据库的用户MySql5.7.18CREATE DATABASE redmine CHARACTER SET utf8;CREATE USER redminelocalhost IDENTIFIED BY redmi…

python删除文件夹中的jpg_Python简单删除目录下文件以及文件夹的方法

本文实例讲述了python简单删除目录下文件以及文件夹的方法。分享给大家供大家参考。具体如下&#xff1a; #!/usr/bin/env pythonimport osimport shutilfilelist[]rootdir"/home/zoer/aaa"filelistos.listdir(rootdir)for f in filelist:filepath os.path.join( ro…

关于生活

最近的实习生活&#xff0c;以及遇到的几个小伙伴让我真正意识到了“生活”。在此记录一下。以后我会每周至少一篇博文&#xff0c;记载这周所学&#xff0c;所思。 转载于:https://www.cnblogs.com/istudy2012/p/4376649.html

python去重且顺序不变_Python实现嵌套列表去重方法示例

发现问题python嵌套列表大家应该都不陌生&#xff0c;但最近遇到了一个问题&#xff0c;这是工作中遇到的一个坑&#xff0c;首先看一下问题raw_list [["百度", "CPY"], ["京东", "CPY"], ["黄轩", "PN"], [&quo…

【原创】Kakfa utils源代码分析(一)

Kafka.utils&#xff0c;顾名思义&#xff0c;就是一个工具套件包&#xff0c;里面的类封装了很多常见的功能实现——说到这里&#xff0c;笔者有一个感触&#xff1a;当初为了阅读Kafka源代码而学习了Scala语言&#xff0c;本以为Kafka的实现会用到很多函数编程(Functional Pr…

redhad yum 安装mysql_redhat7通过yum安装mysql5.7.17教程

rhel/centos系列linux操作系统自身没有mysql的源&#xff0c;需要自行下载安装。本文介绍如何安装mysql5.7.x数据库。第一步&#xff1a;下载源[rootclient ~]# wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm注意&#xff1a;选择mysql57-community-…

codechef Polo the Penguin and the Tree

一般xor 的题目都是用trie解决。 那这道题是在树上的trie; 首先&#xff1a;从root1,遍历树得到1到所有节点的xor 值。 然后对于每个点我们把其插入二进制树中。 对于每一个点查找其二进值异或值最大的数 依次遍历下来。 注意&#xff1a;边的数量开两倍以上&#xff0c;RE很多…

mysql memcached 使用场景_memcache 应用场景

一..memcache应用场景1.应用场景一&#xff1a; 缓解数据库压力&#xff0c;提高交互速度。它的一个总原则是将经常需要从数据库读取的数据缓存在memcached中。这些数据也分为几类&#xff1a;(1)、经常被读取并且实时性要求不强可以等到自动过期的数据。例如网站首页最新文章列…

link2001错误无法解析外部符号metaObject

http://blog.sina.com.cn/s/blog_791f544a0100r01b.html1>MainWindowBottomWidget.obj : error LNK2001: 无法解析的外部符号 "public: virtual struct QMetaObject const * __thiscall MainWindowBottomWidget::metaObject(void)const " (?metaObjectMainWindow…

mysql主从和dump_MySQL主从同步--原理及实现(一)

1、什么是mysql主从同步&#xff1f;当master(主)库的数据发生变化的时候&#xff0c;变化会实时的同步到slave(从)库。2、主从同步有什么好处&#xff1f;水平扩展数据库的负载能力。容错&#xff0c;高可用。Failover(失败切换)/High Availability数据备份。3、主从同步的原理…

【转】Mybatis/Ibatis,数据库操作的返回值

该问题&#xff0c;我百度了下&#xff0c;根本没发现什么有价值的文章&#xff1b;还是看源代码&#xff08;详见最后附录&#xff09;中的注释&#xff0c;最有效了&#xff01;insert&#xff0c;返回值是&#xff1a;新插入行的主键&#xff08;primary key&#xff09;&am…