
mysql
数据之美,重中之重。代号:卡特琳娜!
铁柱同学
博主从事后端开发已然八年,然入行越久越深感知识无限,学海无涯,非一时之功。故编写博客,用于自省记录,也遵循前辈们的教导,希望可以帮到更多的人。愿各位都能勇攀高峰,顺利成为大佬!奥利给!
展开
-
mysql累加某字段到达临界值,获取另一个字段的值
一、前言这篇博客的标题不大好起,所以下面先具体说下需求吧。1、表结构+----+-----------+-------------------+| id | cost_rate | conversions_value |+----+-----------+-------------------+| 1 | 3.58 | 84.83 || 2 | 0.55 | 69.86 || 3 | 18.29 |原创 2020-10-17 18:45:53 · 1419 阅读 · 2 评论 -
mysql带where条件导出数据表以及部分错误解析
一、前言 最近导出数据表的时候,屡屡受挫,让博主一度以为自己记错了,死活导不出来,后来才看到报错:mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1/*!40102 ,SQL_MODE=concat(@@sql_mode, _utf8 ',NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS') */': Unkn原创 2020-09-29 19:10:59 · 11876 阅读 · 2 评论 -
mysql存储数据,varchar类型中的数据变成了科学计数法?
文章目录一、前言1、表现形式2、出现错误的sql二、问题排查1、数据表结构2、错误推测3、最终原因三、解决方案1、更改数据结构(1)表结构(2)分别更新两个字段为 科学计数法 :2.251799813685248e152、按位或上一个值一、前言 这个问题也是比较奇怪的,明明设置的是varchar类型,但存储的结果却是科学计数法,这还了得,必须找一下原因了1、表现形式 [uuid] => 14604440原创 2020-09-24 23:56:17 · 10803 阅读 · 2 评论 -
mysql明明有索引却用不到的情况
一、前言如题所示,博主这边在两表关键更新的时候,明明关联字段都有索引,但是竟然没用上?百思不得其解,最后发现原来是编码格式的问题,此处记录一下。1、问题sql:update test_a as a left join test_b as b on a.uuid=b.uuid set a.log_time = b.log_time;2、explain一下mysql> explain update test_a as a left join test_b as b on a.uuid=b原创 2020-09-24 23:42:32 · 1951 阅读 · 0 评论 -
mysql查询每小时数据和上小时数据的差值
mysql查询某个时间范围内,每小时数据和上小时数据的差值。原创 2020-04-21 16:18:48 · 5227 阅读 · 33 评论 -
mysql的B+树如何存储主键和数据,磁盘io和innodb页大小的一些问题
一、前言 这篇文章动笔之前,光标题就思考了半天,因为文章的起源是一位网友的评论,问的问题比较犀利且分散,实在是不容易拟定标题。博主就借着这个机会研究下这些问题,分别作答一下。这里是网友的提问:文章链接:mysql的查询需要遍历几次B+树,理论上需要几次磁盘I/O?二、正式作答部分 &...原创 2020-04-04 23:01:53 · 7148 阅读 · 84 评论 -
mysql的count()函数如何选择索引,千万级表的count()查询优化实例
一、前言 博主今天在对一个千万级表进行count(*)查询的时候,发现速度有点慢,达到了9s,这对于程序来说是不可承受的,因此萌生了优化count(*)查询的想法,这里记录一下。1、网上的主要两种说法(1)count(*) 函数会选择索引长度最短的字段 ps:索引长度指的是执行计划explain里面的key_len长度。...原创 2020-04-01 21:46:45 · 14794 阅读 · 60 评论 -
原生mysql的批量更新及性能测试
一、前言 我们在做批量更新的时候,经常会使用到框架的批量更新API,那么原生的mysql要怎么做批量更新呢,下面我们来研究下原生的批量更新以及性能测试。(如果有框架,谁又愿意用原生的呢!!!)mysql环境:mysql> select version();+-----------+| version() |+-...原创 2020-01-13 22:11:45 · 4240 阅读 · 8 评论 -
mysql左连接丢失null值的问题
一、前言 如题所示,我们有的时候直接使用左连接查询,当右表不存在该数据的时候,是可以查出带有null的列。可是当在where条件中有右表相关的筛选条件时,我们惊奇的发现查询的结果不带null值了,换句话说就是查出来的结果比预期的少。 博主之前遇到过这个问题...原创 2019-12-29 15:34:15 · 7663 阅读 · 17 评论 -
mysql的表最多可设置多少字段?
一、前言 最近在开发的时候,遇到一个报错:Can't create tablexxx(errno: 185 "Too many columns")根据英文,意思是表的字段太多了,那么mysql的数据表最多能有多少列呢? 怀着虔诚的心态打开百度,连着搜了好几...原创 2019-11-12 20:44:13 · 17935 阅读 · 17 评论 -
mysql为查询结果字段赋默认值
文章目录一、前言二、赋值用到的mysql函数1、IFNULL() 函数2、coalesce()函数3、NULLIF()函数4、isNULL()5、NVL()6、IF()函数三、总结一、前言 我们在查询数据的时候,如果没有对应的数据则返回为null,特别是在left join 和 right join中经常出现null值,因为...原创 2019-10-08 21:58:44 · 8389 阅读 · 2 评论 -
mysql获取两个表中不重复的数据
一、前言 比如有两个数据表,表结构是一样的,一个a表数据300W行,一个b表数据17W行,我们需要获取a表中不包含b表的数据。下面大致记录一下获取过程,方便查询回忆。a表结构:idpay_iduser_id b表结构和a表一直,只不过b表中的us...原创 2019-09-30 23:23:07 · 13676 阅读 · 4 评论 -
mysql根据条件批量插入更新(on duplicate key update)
一、前言 我们在做批量插入的时候,经常需要根据唯一字段判断,唯一字段相同时则进行更新,唯一字段不同时则进行插入。一般来说我们都是采用on duplicate key update 写法,只是假如我们需要、在唯一字段相同,并且满足其他条件时才进行更新,那么该怎么写这个"where"条件呢?on duplicate key upd...原创 2019-09-26 22:07:50 · 10415 阅读 · 16 评论 -
mysql获取两个表中日期字段的最小差值
一、前言 开发中碰到的需求,获取两个数据表中日期字段的差值,并且取得差值最小的那条数据。本篇文章主要讲述如果通过函数获取mysql的日期差值,实际编写时遇到的问题,并且分析需求,得出最终sql等。二、表结构以及需求1、表结构(1)a表结构:"CREATE temporary TABLE if not exists a(...原创 2019-09-23 16:00:52 · 5355 阅读 · 2 评论 -
mysql配置文件构成以及具体的配置demo
一、前言 在了解完mysql的各项配置参数,并且设计出适合自己(2核8G机器)的配置后,博主开始了正式的配置,不过在正式的配置过程中还是遇到了不少问题,这里记录一下配置文件的构成以及具体的配置demo。 关于mysql的配置参数相关,可以参考上一篇文章:m...原创 2019-09-14 23:44:38 · 1331 阅读 · 2 评论 -
mysql配置参数调优(8GB内存和64GB内存)
文章目录一、前言二、查看服务器的CPU和内存1、查看CPU的个数2、查看服务器的内存3、数据库版本三、64GB内存的mysql配置参数四、本机8GB内存的mysql配置参数1、查看数据库版本2、具体的配置参数五、总结1、数据库偏向于写操作2、数据库偏向于读操作3、补充一、前言 我们新搭建一个LNMP环境之后该如何设置配置文件...原创 2019-09-11 23:02:00 · 16096 阅读 · 9 评论 -
mysql在已有主键的表中新增自增长字段
一、前言 如标题所示,给数据表加自增长字段是很简单的事情,但是如果这个表已经有主键,并且存在数据的情况下,怎么给数据表加自增长主键呢?下面咱们来详细说一下这个东东。1、目标需求:(1)数据表没有id字段,但是有个char类型的字段作为主键使用。(2)表中没有其他自增长的字段(3)但是根据需求,需要重新加上id字段,新加...原创 2019-09-08 21:47:16 · 5752 阅读 · 12 评论 -
明明表中有这个索引,但mysql的force index 无效?
一、前言 最近在写sql的时候,会格外注意一些sql的优化,针对复杂的sql,优化器使用的方案并不是最佳方案,所以可能需要我们使用force index这种方式来自己选择索引,加快查询速度。这次记录一下明明表中有这个索引,但mysql的force index 无效的问题。二、分析问题1、问题sqlselect uuid ...原创 2019-08-21 19:58:06 · 5216 阅读 · 1 评论 -
mysql批量插入数据,一次插入多少行数据效率最高?
文章目录一、前言二、批量插入前准备1、插入到数据表的字段2、计算一行字段占用的空间3、在数据里做插入操作的时候,整体时间的分配三、批量插入数据测试1、SQL语句的大小限制2、查看服务器上的参数:3、计算一次能插入的最大行记录4、测试插入数据比对(1)插入11W条数据,按照每次10,600,1000,20000,80000来测试:(2)加大数据量到24w(3)加大测试量到42W5、如果插入的值就是s...原创 2019-08-18 21:41:03 · 21401 阅读 · 27 评论 -
innodb主键的长度为什么不能大于767字节
一、前言 这篇文章是基于之前的一篇:导入sql文件报错:1071 Specified key was too long; max key length is 767 bytes ,当时只是知道主键长度不能超过767字节,但是并不知道为什么会这么规定,这个767有什么特殊的含义吗?这篇文章会尽量去解读一下这个767是什么,为什么...原创 2019-07-24 16:43:41 · 3489 阅读 · 10 评论 -
mysql的查询需要遍历几次B+树,理论上需要几次磁盘I/O?
一、前言 这个问题是博主去年面试的时候被大佬问过的问题,当时也不大清楚里面的原理,硬着头皮回答的,当然,最终面试也没过,哈哈。最近刚好研究了这块的一些东西,就有种恍然大悟的感觉,这里分享给大家,欢迎拍砖~二、遍历B+树的次数 首先,既然问题是一次查询,那...原创 2019-07-24 15:35:11 · 13946 阅读 · 59 评论 -
【mysql】sql查询速度不变?不同数据量下,查询速度不会变化的问题
一、前言 如题所示,博主在测试sql的时候,发现有一条sql的速度是固定的?因为是时间搜索,所以我们通过更改时间区间来测试如下:between '2018-05-20 00:00:00' and '2019-05-30 23:59:59 66646 rows 19sbetween '2019-05-20 ...原创 2019-06-02 21:00:52 · 1712 阅读 · 0 评论 -
mysql使用group by实现组内排序实战
一、前言需求是:获取用户充值总数最多的前100名,并且获取最新充值的时间和充值数量分析下:(1)首先是要获取用户充值的总数,然后进行排序取前100;(2)要获取用户的最新一次充值时间和金额,那么要以用户作为分组,然后通过聚合取最新充值时间和数量分析之后,大概就了解了,要先group by分组,然后进行组内排序。二、解决过程1、先按大意写一条sql主要字段说明:pay_time ...原创 2019-05-28 20:54:48 · 6855 阅读 · 4 评论 -
比explain更加详细的分析计划:Query Profiler
一、前言 这篇博客是之前总结的一个知识点,也是偶然看别人博客的时候发现的这个东东,,也算是解析sql语句性能的利器吧,记录一哈。 Query Profiler是MYSQL自带的一种query诊断分析工具,通过它可以分析出一条SQL语句的性能瓶颈在什么地方。...原创 2019-05-10 14:45:14 · 1270 阅读 · 2 评论 -
mysql最左侧原则的深入理解
一、前言 一直以来,博主对最左侧原则的理解都是,比如给a,b,c加上索引,那么a,b可以用到索引,a,c也可以用到索引,但b,c是用不到的。包括这个a必须要在用到的第一个索引处。但是如果一个表中只有a,b,c三个字段,给他们加上联合索引(a,b,c),此时SELECT * FROM test WHERE c=2;&nbs...原创 2019-05-10 13:55:00 · 8074 阅读 · 22 评论 -
mysql的优化器执行过程(附代码解析,手动注释等)
一、前言 这篇文章的诞生很偶然,优化器大家基本都听过,感觉就是只要自己不能理解的东西,都归于mysql优化器就完事了,哈哈。但是优化器到底是什么呢,执行过程是什么样子的呢?博主是在看一篇博文的时候,看到人家开启优化器追踪sql语句,emmm,很高大上,行吧,那咱也研究研究。 &n...原创 2019-04-09 18:15:22 · 3270 阅读 · 4 评论 -
mysql的in查询是可以用到索引吗?亲测详解
一、前言 如题所示,这个问题很早之前就听过了,之前我也是一直以为in查询是用不到索引的。后来陆陆续续看到很多博客,有的说in查询可以用索引,有的说不能用索引,所以博主就越发好奇起来。到底能不能用索引,绝对有个正确的答案,而不是这样的模棱两可。二、in查询的一些总结 ...原创 2019-04-09 17:41:19 · 67043 阅读 · 27 评论 -
mysql优化sql相关(持续补充)
一、前言 此处为博主在开发中遇到的优化mysql 的笔记,记录下来也是为了方便自己查阅,在每次写完或者要写sql之前都看一看,仅作记录。以下也都是博主在开发中遇到并优化的过程,踩坑不计其数,也许只有这样才能变得强大吧。二、正文1、对有索引的字段进行函数操作,例如: $start_time是时间戳格式 log...原创 2019-03-27 10:42:39 · 2300 阅读 · 25 评论 -
mysql的left join和inner join的效率对比,以及如何优化
一、前言最近在写代码的时候,遇到了需要多表连接的一个问题,初始sql类似于:select * from a left join b on a.x = b.x left join c on c.y = b.y left join d on d.z=c.z 这样的多个left join组合,一方面是心里有点不舒服,总觉得这种...原创 2019-03-18 11:31:15 · 58610 阅读 · 31 评论 -
mysql报错:Reading table information for completion of table and column names
一、前言在使用命令行打开数据库的时候,报错如标题所示。这里总结记录一下。二、错误原因1、锁表的原因参考链接:https://blog.youkuaiyun.com/ssergsw/article/details/22860261 就比如我们删除大数据库的时候,可能删一半的时候,我们手动关闭了mysql,那么此时这个数据库是处于被锁...原创 2019-02-22 10:18:49 · 2808 阅读 · 0 评论 -
mysql命令行各个参数解释
mysql -u root -p 等这些常用的参数外,你知道多少?来测试一下吧一,mysql命令行参数查看复制打印?Usage: mysql [OPTIONS] [database] //命令方式-?, --help //显示帮助信息并退出-I, --help //显示帮助信息并退出–auto-rehash //自动补全功能,就像li...转载 2019-02-22 10:03:54 · 711 阅读 · 0 评论 -
MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结
前言1、‘’最近公司大佬让我优化sql的时候,说可以通过控制where条件,尽可能的少的较少数据库的开支,少生成一些无用的binlog。由此引出binlog这个概念,大家一起学习一下关于Binlog(超详细的博客)2、MySQL中有六种日志文件,分别是:重做日志(redo log)回滚日志(undo log)二进制日志(binlog)错误日志(errorlog)慢查询日志(sl...转载 2019-02-17 16:23:16 · 1004 阅读 · 0 评论 -
phpstudy升级mysql之后,修改配置文件无效的问题
博主刚到新公司,用的还是phpstudy集成环境,只是公司用的数据库是Mysql5.7的,而phpstudy默认自带的数据库只是mysql5.5的。无奈之下升级,但是升级后发现修改配置文件无效,一定是哪里操作的不对,咱们来研究研究。一、phpstudy升级mysql 5.7(1)升级这部分大概就是重新下载mysql5.7...原创 2019-01-19 09:51:59 · 2508 阅读 · 2 评论 -
mysq 开启慢查询日志
一、mysql的慢查询 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10S以上的语句。默认情况下,Mysql数据库并不...原创 2018-12-07 14:58:57 · 11402 阅读 · 0 评论 -
mysql的count(*)的优化,获取千万级数据表的总行数
一、前言      这个问题是今天朋友提出来的,关于查询一个1200w的数据表的总行数,用count(*)的速度一直提不上去。找了很多优化方案,最后另辟蹊径,选择了用explain来获取总行数。二、关于count的优化&n原创 2018-11-23 17:04:02 · 28855 阅读 · 21 评论 -
【数据库】索引优化策略
关于什么是索引,如何建立索引,索引的优缺点等,请移步我的另外一篇文章mysql索引简谈一、为什么要建立索引? 一句话,为了加快查询效率。注意这里的“查询”,而不是增删改。建立索引的列,一旦发生了增加、更新或删除操作,索引是需要维护的,此外不宜建立大量的索...转载 2018-11-19 09:29:44 · 416 阅读 · 0 评论 -
mysql设置text字段为not null,并且没有默认值,插入报错:doesn't have a default value
一、问题描述在往数据库写入数据的时候,报错:'字段名' doesn't have a default value      本来这个错误是经常见到的,无非就是字段没有设置默认值造成的。奇怪的是,我这边报错的字段,其类型是text类型。众所周知的,text类型是不能有默认值的。如此一来就有了矛盾,text类型的字段明明不能有默认...原创 2018-08-22 10:17:57 · 24622 阅读 · 5 评论 -
mysql的死锁是什么?如何查看?
一、什么是死锁死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等的进程称为死锁进程.二、死锁的表现数据库锁机制三、如何避免死锁阻止死锁的途径就是避免满足死锁条件的情况发生,为此我们在开发的过程中需要遵循如下原则:1.尽量避免并发的执行涉及到修改数...原创 2018-06-06 18:41:58 · 5388 阅读 · 0 评论 -
关于mysql设置varchar 字段的默认值''和null的区别,以及varchar和char的区别
一、背景      根据业务需求,发现以前的同事在设计表的时候,很多字段都没有设置默认值。在mysql5.7版本之后,没有设定默认值的字段,在严格模式下是很容易报错的,所以我这边需要先给每个字段加上一个默认值。对于常见的int类型,默认值为0就好,但是对于varchar类型呢,默认值是设置为”还是N原创 2018-05-25 15:42:06 · 21624 阅读 · 7 评论 -
mysql给字段设置默认值,以及mysql的严格模式
一、背景 在插入数据库时,报错#1364,后来才知道是字段在创建的时候,没有设置默认值的原因。关于默认值,我们都知道设置默认值为0或者null的时候,就算我们不插入该字段,数据库也会自动按照默认值填充,那么为什么一定要设置默认值呢?二、解释这部分参考链接:https://segmentfault.com/q/10...原创 2018-05-24 15:34:28 · 11861 阅读 · 0 评论