首页 > 数据库 >mysql的性能的一些测试

mysql的性能的一些测试

时间:2023-02-15 19:46:10浏览次数:37  
标签:goods 性能 ORDER 索引 测试 mysql 100 id SELECT

  1. 测试平台mysql 8.0.31,2核心4线内存2G的虚拟机硬盘ssd,下面测试结果的瓶颈很多都来自这2G的内存。

  2. char 比 verchar块? 首先说结论,差不多,没区别,别信谣

    • 110W 数据,无索引,16字长条件下,varchar: 0.562秒,char: 0.567 秒 几乎没有区别

    • 610W 数据,无索引,16字长条件下,varchar: 4.24秒,char: 4.27 秒 ,几乎无差别误差范围内

    • 1110W 数据,无索引,16字长条件下,varchar: 7.862 秒,char: 8.013 秒 ,几乎无差别误差范围内,但是好像varchat 真的比 chat快一点点。

    • 2110W 数据,无索引,16字长条件下,varchar: 17.960 秒,char: 17.798 秒 ,几乎无差别误差范围内

    • 2110W 数据,有索引,16字长条件下,varchar: 0.024 秒,char: char: 0.024 秒

    • 所以结论就是目前来说性能几乎没区别。

  3. select ( 星) 和 selec (id) 和 select (二级索引)的效率区别
    //SELECT count(*) 应该默选择的 SELECT count(id) ,而没有只能的选择到最优的索引
    SELECT count(星) from goods 13.224秒
    SELECT count(id) from goods 13.001秒
    //des是二级索引,比主键索引矮胖,统计数据条数,不用回表,比主键效率高很多
    SELECT count(des) from goods 3.265 秒

    备注:innodb的select count 是实时统计,效率比较低,所以查询的时候请务必带上查询条件并且命中索引,如果没有条件可以考虑时间上建立索引默认查询一定时间以内

  4. 2000W级别数据对mysql插入数据的影响(多线程批量插入)
    0条二级索引,10W耗时3.6秒

    1条二级索引,10W耗时5秒
    2条二级索引,10W数据耗时7.8秒

  5. 无查询条件的深分页对mysql的性能影响
    SELECT * from goods ORDER BY id limit 20000000,100 ,耗时 18秒
    SELECT * from goods ORDER BY id limit 2000000,100 ,耗时 2.16秒
    SELECT * from goods ORDER BY id limit 200000,100 ,耗时0.18秒
    SELECT * from goods ORDER BY id limit 20000,100 ,耗时0.050秒
    SELECT * from goods ORDER BY id limit 2000,100 ,0.026秒,区别已经不大了。

  6. 我们看看上面的 2000W深分页怎么优化

    • SELECT * from goods g2 where g2.id in( SELECT id from goods g1 ORDER BY g1.id limit 20000000,100 ) ORDER BY g2.id ,这种子查询在mysql 8 中不准用了 语法错误,提示不支持

    • SELECT * from goods g2 where g2.id in( select * from (SELECT id from goods g1 ORDER BY g1.id limit 20000000,100 ) temp ) ,尽然执行了28秒,看下面的执行计划很奇怪,先执行内部嵌套子查询,这个没问题,但是外层查询尽然在中间的那个子查询之前执行了。mysql 的优化器觉得这样效率比较高?

    • SELECT * from goods g2 where g2.id in( select * from (SELECT id from goods g1 ORDER BY g1.id limit 20000000,100 ) temp ) ORDER BY g2.id,我们给它加上排序字段,而且本来就应该加,这时候mysql的优化器尽然改变了执行顺序,正常了最后执行g2的查询,也许mysql觉得 最后还要排序不如最后执行,执行时间5.4秒.块很多,走的索引覆盖,内存如果大会更加快。默认查询是18秒。

    • SELECT * from (SELECT id FROM goods ORDER BY id limit 20000000,100) t1 join goods t2 on t1.id = t2.id 我们走表关联,使用索引,效果 5.41秒 和子查询走我们期望的g2最后执行的时候一样。

    • SELECT id FROM goods ORDER BY id limit 20000000,100 我们试试走索引覆盖只查询id试试要多久,结果5.36秒

    • 结论慎用子查询,有时候它 不一定按照最优的结果走。可以看了程序索引覆盖然后二次查询,或者join 关联走索引覆盖,如果要用子查询,检查一下是否按照预期的执行了。不然效果差很多。

  7. in的效率和id的数量关系 执行语句 SELECT 星 from goods where id in(ids),id取得2000W数据的中段连续id

    100个Id, 0.034秒
    1000个Id, 0.51秒
    1W个Id, 0.75秒
    10W个Id, 81秒 这明显是因为硬件限制,内存装不下,反复回盘了
    所以in 的效率很高,in上限1000个Id的说法是扯淡。

标签:goods,性能,ORDER,索引,测试,mysql,100,id,SELECT
From: https://www.cnblogs.com/cxygg/p/17124426.html

相关文章

  • 超详细!Jmeter性能测试
    前言性能测试是一个全栈工程师/架构师必会的技能之一,只有学会性能测试,才能根据得到的测试报告进行分析,找到系统性能的瓶颈所在,而这也是优化架构设计中重要的依据。测试流......
  • jmeter做性能测试
    一、线程与进程一个软件/程序,是以进程的方式存在的,一个进程可含多个线程(一个软件可以做多个事情,就是基于线程而实现的)二、并发的基本概念并发:并发用户数:同一时刻,服务器......
  • 免安装MYSQL下载并安装
    一、去MYSQL官网下载https://www.mysql.com/官网首页翻到下面,点击如图所示的MySQLCommunityServer  二、解压,配置,安装可以看这篇教程:http://c.biancheng.net/vi......
  • 部署canal同步mysql-binlog到kafka具体操作
    准备[mysqld]log-bin=mysql-bin#开启binlogbinlog-format=ROW#选择ROW模式授权canal链接MySQL账号具有作为MySQLslave的权限CREATEUSERcanalIDENTI......
  • mysql数据库备份
    完全备份每次对数据进行完整的备份可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象但它需要花费更多的时间和空间,所以,做一次完全备份的......
  • mysql列转行
    背景需要将原子数据表的数据同步到结果表原子数据表:base_indexdate_timeindex_idvalue2023-01pv1002023-01uv2002023-01newUser3002023-0......
  • Windows下Python安装MySQLdb
    下载whl列表地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient下载对应的版本,cp含义是CPython,例如:如果Python版本是3.9.11,就选cp39,如果Python版本是2.7.x,则......
  • MySql主从复制介绍
    一、主从复制介绍MySQL主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL默认采用异步复制方式,这样从节点不用一直访问主服务器来更新......
  • MySQL 安装教程
    MySQL安装教程MySQL下载地址:https://downloads.mysql.com/archives/community/这里下载mysql-5.7.28版本的。建议下载压缩包版的,方便卸载~1、解压压缩包,放到环境目录下......
  • 软件自动化测试高频面试题
    Hello,你们的好朋友来了!今天猜猜我给大家带来点啥干货呢?最近很多小伙伴出去面试的时候经常会被问到跟自动化测试相关的面试题。所以,今天特意给大家整理了一些经常被公司问到......