mysql
【谭小谭】
这个作者很懒,什么都没留下…
展开
-
varchar有最大长度吗
先说结论,mysql 中的 varchar 是有最大长度限制的,这个值是 65535 个字节。 varchar(100),这个 100 的单位是啥,这个单位其实在不同版本中是不一样的。 在早期低版本中代表的是字节,具体哪个版本我也没去验证了,后来被改成了字符,不过可以肯定的是在 5.1 版本后, varchar(100)就是指 100 个字符。 说到 varchar...原创 2020-01-06 10:42:54 · 3722 阅读 · 0 评论 -
这种sql写法真的会导致索引失效吗
网上经常能看到一些文章总结在 mysql 中不能命中索引的各种情况,其中有一种说法就是指使用了 or 的语句都不能命中索引。 这种说法其实是不够正确的,正确的结论应该是,从 mysql5.0 后,如果在 or 连接的字段上都有独立的索引的话,是可以命中索引的,这里就是用到了 index_merge 特性。 在 mysql5.0 版本以前一条 sql 只能选择使用一个索引,而且...原创 2019-07-13 20:17:10 · 661 阅读 · 0 评论 -
mysql为什么建议使用自增主键
前面我写了几篇关于 mysql 索引的文章,索引是 mysql 非常重要的一部分。你也可能经常会看到一些关于 mysql 军规、mysql 查询优化的文章,其实这些操作的背后都是基于一定的原理的,你要想明白这些原理,首先就得知道 mysql 底层的一些东西。 我在这里举几个例子吧。 我们都知道表的主键一般都要使用自增 id,不建议使用业务 id ,是因为使用自增 id 可以避...原创 2019-06-27 11:20:14 · 3807 阅读 · 7 评论 -
如何分析一条sql的性能
这篇文章将给大家介绍如何使用 explain 来分析一条 sql 。 网上其实已经有非常多的文章都很详细的介绍了 explain 的使用,这篇文章将实例和原理结合起来,尽量让你有更好的理解,相信我,认真看完你应该会有特别的收获。 explain 翻译过来就是解释的意思, 在 mysql 里被称作执行计划,即可以通过该命令看出 mysql 在经过优化器分析后决定要如何执行该条 ...原创 2019-06-04 11:28:50 · 688 阅读 · 0 评论 -
mysql删除操作其实是假删除
在 InnoDB 中,你的 delete 操作,并不会真的把数据删除,mysql 实际上只是给删除的数据打了个标记,标记为删除,因此你使用 delete 删除表中的数据,表文件在磁盘上所占空间不会变小,我们这里暂且称之为假删除。 上面这个是结论,我们可以通过一个例子来验证下。 沿用前面文章中的例子吧,先创建一个存储过程,插入 10w 条数据,然后看下这 10w 条数据占了多大的空间...原创 2019-05-20 10:24:14 · 1695 阅读 · 3 评论 -
听说mysql还会选错索引
大家都知道,mysql 一个表中可以创建多个索引,但是在执行一条查询语句的时候,mysql 只能选一个索引,如果我们没有指定 mysql 使用某个索引,那么就是由 mysql 的优化器来决定要使用哪个索引了,然而,mysql 也是会有选错的时候。 前面的文章,我们有介绍过执行一条查询 sql 语句分别会经历那些过程,执行一条sql语句都经历了什么?存在多个索引的情况下,优化器一般会...原创 2019-05-09 14:07:01 · 216 阅读 · 0 评论 -
如何让mysql索引更快一点
在 InnoDB 中,从二级索引回到主键索引查询数据,这个过程称作回表过程,而且这个回表过程是可以被优化的,这个优化就是利用覆盖索引。 先说结论,如果一个索引的字段包含了所有要查询的字段,这个索引就称作覆盖索引,覆盖索引可以减少回表过程,能有效提高查询效率。 前面我们有说过,在 InnoDB 中数据都是保存在 B+ 树上,主键索引保存了整行记录,二级索引保存了主键的值。 ...原创 2019-04-26 10:43:23 · 186 阅读 · 0 评论 -
mysql为什么加索引就能快
平时我们要优化 mysql 查询效率的时候,最常见的就是给表加上合适的索引了,那今天就来聊聊为什么加了索引就快了呢。 很多人会说索引就相当于一本书的目录,通过目录来找书中的某一页,确实是很快的,如果没有目录,就需要一页一页的去翻书了,大大降低了效率。这个比喻其实还挺恰当的,也是一个很经典的索引比喻了。 在 InnoDB 中,每个索引其实都是一颗 B+ 树,主键索引称作聚簇索引...原创 2019-04-22 09:55:09 · 4491 阅读 · 0 评论 -
mysql索引为啥要选择B+树 (下)
有读者在mysql索引为啥要选择B+树 (上)上篇文章中留言总结了选择 B+ 树的原因,大体上说对了,今天我们再一起来看看具体的原因。 索引为什么要保存在硬盘中 首先要明白几个概念,服务器存储一般分内存和硬盘,内存的大小相对于硬盘来说是很小的。内存的访问速度是纳秒级别的,非常快,而硬盘的访问速度相对内存来说就比较慢了。 不管是访问内存还是硬盘数据,操作系...原创 2019-03-17 13:01:02 · 270 阅读 · 0 评论 -
mysql索引为啥要选择B+树 (上)
不知道你有没有这种感觉,那些所谓的数据结构和算法,在日常开发工作中很少用到或者几乎不曾用到,可能只是在每次换工作准备面试的时候才会捡起来学习学习。 那我希望今天这篇文章能让你对数据结构的具体应用能有个初步的概念,就从我们每天都在用的 mysql 数据库说起吧。 今天这个标题,严格来说其实是不正确的,我在前面的文章中有这么解释过:执行一条sql语句都经历了什么? 首先...原创 2019-03-09 17:13:25 · 153 阅读 · 0 评论 -
执行一条sql语句都经历了什么?
每天都在跟 mysql 打交道,你知道执行一条简单的 select 语句,都经历了哪些过程吗? 首先,mysql 主要是由 server 层和存储层两部分构成的。server 层主要包括连接器、查询缓存,分析器、优化器、执行器。存储层主要是用来存储和查询数据的,常用的存储引擎有 InnoDB、MyISAM,MySQL 5.5.5版本后使用 InnoDB 作为默认存储引擎。 连...原创 2019-01-24 10:09:51 · 413 阅读 · 0 评论 -
mysql 中 int(5) 到底有是多长?
在设计 mysql 表字段时,int(5) 表示是该字段长度为 5 吗?如果你觉得是,那请你继续往下看,相信你会有新的收获的。 先来看一个实际例子,我们创建一个新表,表中只有一个主键 id 和一个 length 字段,其中 length 字段设置为 int(5) 。 #新建test表 CREATE TABLE `test` ( `id` int(11) NOT NULL...原创 2019-01-18 09:54:33 · 14700 阅读 · 0 评论 -
mysql中 group by的使用事项
1、概述 “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。 2、原始表 3、简单Group By 示例1 select 类别, sum(数量) as 数量之和 from A group by 类别 返回结果如下表,实际上就是分类汇总。 4、Group B...转载 2018-01-02 14:55:25 · 579 阅读 · 0 评论 -
mysql中replace into注意事项
(1) MySQL replace into 是insert into 的增强版本,它主要用于以下场景: 在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在; 2. 如果不存在,则插入;3.如果存在,则更新。 那么 mysql 中如何实现这样的逻辑呢?别着急 mysql中有更简单的方法: replace into <strong>replace in...转载 2018-02-24 10:02:17 · 946 阅读 · 0 评论 -
mysql5.6 innodb数据表报错分析
: Error: Table "mysql"."innodb_table_stats" not found. InnoDB: Recalculation of persistent statistics requested for table "mydatabase"."mytable" but the required persistent statistics storage is ...原创 2018-05-15 10:59:09 · 2089 阅读 · 0 评论 -
记一次mysql服务的流血事件
2018年5月10日,使用django在服务器上搭建了一个web站点,遇到了一系列的问题,最终在官网找到了解决方案,然而晚上十点左右无意间发现mysql服务处于挂掉状态,网站和微信小程序全部不能正常使用,第一想到的是cron脚本,因为之前mysql服务就经常会自动停止服务,后来干脆写了个cron脚本实时监听mysql服务并自动重启mysql,查看cron日志发现,mysql于10号上午就已经...原创 2018-11-28 17:29:21 · 282 阅读 · 0 评论 -
mysql快速升级到5.6
centos6 升级 mysql,主要用于支持表情存储。 升级前务必备份数据。 主要操作步骤如下: 一、备份数据库 mysqldump -uname -ppassword db_name > bak.sql name数据库登录名,password数据库登录密码,db_name要备份的数据库名称,bak.sql备份文件名。 二、卸载现有mysql 卸载之前先停止mys...原创 2018-11-28 17:33:04 · 936 阅读 · 0 评论 -
一条sql揭秘你最亲密的微信好友
qq空间有个栏目叫谁最在乎你和你最在乎谁,大概是通过你和好友间的互动来推断的,微信的聊天记录数据应该更能推断出更多的可能来,今天我们用一条sql来分析出谁是你最亲密的好友。 首先对微信两个主要的数据表来个大胆的猜测,一个用户user表,一个聊天记录msg表,user用户表用来存放微信用户信息,每个用户都会以一条记录的形式存在该表中,msg表用来存放用户之间的聊天信息,其中用户间的每一...原创 2018-11-29 10:25:04 · 306 阅读 · 0 评论