mysql
文章平均质量分 71
JackMa_
每个优秀的人,都有一段沉默的时光,那段时光,是付出了很多努力,却得不到结果的日子,我们把它叫做扎根。
展开
-
Mysql随机查询N条数据效率最快的查询方法总结
使用到的Mysql函数有:FLOOR(x):返回小于或等于 x 的最大整数RAND():返回 0 到 1 的随机数 ROUND(x):返回离 x 最近的整数MAX(expression):返回字段 expression 中的最大值MIN(expression):返回字段 expression 中的最小值以下方法测试耗时由小到大1、SELECT *FROM `t_topic`WHERE id >= ( SELECT原创 2022-03-17 19:50:32 · 1459 阅读 · 0 评论 -
SQL语言的分类:DQL、DML、DDL、DCL
SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。1、数据库查询语言DQL(Structure Query Language)数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块:SELECT <字段名表>FROM <表或视图名>WHERE <查询条件>2、数据操纵语言DML(Data Manipulation Language statements)数据操纵原创 2022-03-03 17:53:02 · 586 阅读 · 0 评论 -
面试官:如何保持mysql和redis中数据的一致性?
如何保证缓存和数据库一致性,这其实是一个老生常谈的话题了。但很少人能真正把这个问题讲明白,例如:到底是更新缓存还是删缓存? 到底选择先更新数据库,再删除缓存,还是先删除缓存,再更新数据库? 为什么要引入消息队列保证一致性? 延迟双删到底什么?会有什么问题?到底要不要用? ...下面我们就来把这些问题「彻底」讲清楚。内容稍微有点长,但干货很多,希望你可以耐心读完。引入缓存提高性能我们从最简单的场景开始讲起。如果你的业务处于起步阶段,流量非常小,那无论是读请求还是写请求转载 2022-02-12 20:35:07 · 385 阅读 · 0 评论 -
MySQL 中关于锁的高频考点,拿捏了
1.什么是锁,锁的作用是什么?回答:锁是数据库系统区别文件系统的一个关键特性,锁机制用于管理对共享资源的并发访问,保持数据的完整性和一致性。【摘自:MySQL技术内幕InnoDB存储引擎】2.数据库有哪些锁?lock和latch的区别回答:数据库中有表锁和行锁等lock锁:锁的对象是事务,用于锁定数据库中的对象,如表、页、行等,并且lock锁一般在commit或rollback后释放,有死锁机制。latch锁:一般称为轻量级锁,要求锁定的时间必须非常短,在InnoDB中又可以分为mute转载 2022-01-03 17:59:46 · 202 阅读 · 0 评论 -
MySQL常见考点总结
MySQL常见考点总结原创 2022-01-03 17:42:34 · 726 阅读 · 0 评论 -
mysql 为什么不能用binlog来做数据恢复?
mysql数据提交之binlog与redolog转载 2022-01-03 17:36:08 · 2912 阅读 · 0 评论 -
MySQL查询时不加order by的时候默认排序规则是什么?
MySQL查询的时候一般都会加一个order by来保持查出的顺序,但没加的时候就会出现怪异的排序出来。示例1:id是自增的,可以看出查询结果是按插入顺序排的怪异的示例2:跟上边一样,没有任何条件添加,查出的顺序就不是按照id来的了,中间会却一段数据,被排序在后边了。为什么呢?经explain分析得知:以上两图分别对应上边俩示例的explain,默认情况下第一个没有用到索引,第二个用到了user_id这个索引,user_id是表里除了主键之外的唯一一个索引,普通索引。原创 2021-06-29 21:23:58 · 8770 阅读 · 0 评论 -
【MySQL】删除重复的电子邮箱
方法:使用DELETE和WHERE子句算法我们可以使用以下代码,将此表与它自身在电子邮箱列中连接起来。SELECT p1.*FROM Person p1, Person p2WHERE p1.Email = p2.Email;然后我们需要找到其他记录中具有相同电子邮件地址的更大 ID。所以我们可以像这样给WHERE子句添加一个新的条件。SELECT p1.*FROM Person p1, Person p2WHERE ...原创 2021-05-12 12:13:16 · 552 阅读 · 1 评论 -
MySQL索引相关知识点总结
Mysql索引索引介绍索引是什么 官方介绍索引是帮助MySQL高效获取数据的数据结构。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。 一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的(可能存储在单独的索引文件中,也可能和数据一起存储在数据文件中)。 我们通常所说的索引,包括聚集索引、覆盖索引、组合索引、前缀索引、唯一索引等,没有特别说明,默认都是使用B+树结构组织(多路搜索树,并不一定是二叉的)的索引。 索引的转载 2020-10-24 14:15:52 · 343 阅读 · 0 评论 -
为什么不推荐使用外键约束
引言其实这个话题是老生常谈,很多人在工作中确实也不会使用外键。包括在阿里的JAVA规范中也有下面这一条【强制】不得使用外键与级联,一切外键概念必须在应用层解决。但是呢,询问他们原因,大多是这么回答的每次做DELETE 或者UPDATE都必须考虑外键约束,会导致开发的时候很痛苦,测试数据极为不方便。坦白说,这么说也是对的。但是呢,不够全面,所以开一文来详细说明。正文首先我们明确一点,外键约束是一种约束,这个约束的存在,会保证表间数据的关系“始终完整”。因此,外键约束的存在,并非全然转载 2020-09-07 17:03:48 · 957 阅读 · 0 评论 -
经典面试题:SQL语句使用SELECT、CASE、WHEN、THEN统计学生各科成绩
有如下score表:CREATE TABLE `score` ( `name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `course` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `score` float DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode原创 2020-08-07 12:20:14 · 2410 阅读 · 0 评论 -
为什么代码规范要求SQL语句不要过多的join?
来源:柯三来源:https://urlify.cn/3ueq6v面试官:谈谈你对join的理解我:好的(再答错就彻底完了,把握住机会)SQL中的join可以根据某些条件把指定的表给结合起来并将数据返回给客户端join的方式有inner join 内连接left join 左连接right join 右连接full join 全连接...转载 2020-04-04 16:34:12 · 410 阅读 · 0 评论 -
何时产生临时表?
我们在执行某些SQL语句的时候有可能会生成临时表.我们应该尽量的去避免临时表.因为临时表会浪费内存和时间.那么什么情况下会产生临时表呢?If there is anORDER BYclause and a differentGROUP BYclause, or if theORDER BYorGROUP BYcontains columns from tables othe...转载 2020-04-02 14:25:06 · 629 阅读 · 0 评论 -
数据库面试考题一览(全面覆盖)
一、基本概念1.主键、外键、超键、候选键超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。候选键:是最小超键,即没有冗余元素的超键。主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。外...转载 2020-04-01 22:56:13 · 25807 阅读 · 0 评论 -
centos7下备份mysql5.7数据库数据
一、修改my.cnfvim /etc/my.cnf在其中加入[mysqldump]及name和password,执行mysqldump命令的时候用到:注意:password等号后边要加引号二、编写shell脚本vim /root/backup_full.sh脚本内容#!/bin/bash#备份目录BACKUP_FILEDIR=/root/mysql/b...原创 2020-04-01 16:01:41 · 651 阅读 · 0 评论 -
MySQL的索引有哪几种?
索引是什么?MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。创建索引时,你需要确保...转载 2020-03-27 18:06:58 · 869 阅读 · 0 评论 -
MySQL数据库之互联网常用分库分表方案
一、数据库瓶颈不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发量、吞吐量、崩溃)。1、IO瓶颈第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询时会产生大量的IO,降低查询速度 ->分库和垂直分表。第二种...转载 2020-03-25 20:29:12 · 144 阅读 · 0 评论 -
mysql在线修改大表结构之pt-online-schema-change
前言MySQL大字段的DDL操作:加减字段、索引、修改字段属性等,在5.1之前都是非常耗时耗力的,特别是会对MySQL服务产生影响。在5.1之后随着Plugin Innodb的出现在线加索引的提高了很多,但是还会影响(时间缩短了),主要是在更改期间,会生成一个互斥锁,阻塞对整个表的所有操作。不过MySQL 5.6可以避免上面的情况,支持在线DDL操作了。但目前大部分在用的版本都是5.6之前的,...原创 2020-03-25 15:05:02 · 702 阅读 · 0 评论 -
MySQL 创建用户并设置所有权限
1、创建用户:CREATE USER 'username'@'host' IDENTIFIED BY 'password';username:用户名;host:指定在哪个主机上可以登录,本机可用localhost,%通配所有远程主机;password:用户登录密码;2、授权:GRANT ALL PRIVILEGES ON *.* TO ‘username’@‘%’ IDENT...原创 2020-03-25 13:01:30 · 1125 阅读 · 0 评论 -
什么是 MySQL 索引?
什么是索引?假设我们有一张数据表 employee(员工表),该表有三个字段(列),分别是name、age 和address。假设表employee有上万行数据(这公司还真大),现在需要从这个表中查找出所有名字是‘ZhangSan’的雇员信息,你会快速的写出SQL语句:select name,age,address from employee where name='ZhangSan...转载 2020-03-25 12:35:08 · 5560 阅读 · 0 评论 -
mysql数据库原理
说起MySQL的查询优化,相信大家收藏了一堆奇技淫巧:不能使用SELECT *、不使用NULL字段、合理创建索引、为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必。因而理解这些优化建议背后的原理就尤为重要,希望本文能让你重新审视这些优化建议,并在实际业务场景下合理的运用。MySQL逻辑架构如果能在头脑...转载 2020-03-17 00:23:11 · 532 阅读 · 0 评论 -
Navicat连接Mysql8出现1251错误
服务器安装mysql8,本地用navicat连接是提示1252错误:原因是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password, 解决问题方法有两种,一种是升级navicat驱动,一种是把mysql用户登录密码加密规则还原成mysql_native_password.最直接的解决方法:...原创 2020-03-14 15:12:57 · 412 阅读 · 0 评论 -
mysql数据库锁的产生原因及解决办法
这篇文章主要介绍了mysql数据库锁的产生原因及解决办法,需要的朋友可以参考下数据库和操作系统一样,是一个多用户使用的共享资源。当多个用户并发地存取数据 时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并 发控制的一个非常重要的技术。在实际应用中经常会遇到的与锁相关的异常情况,当两个事务需要一组有冲突...转载 2020-03-11 14:32:25 · 1196 阅读 · 0 评论 -
MySQL面试常见问题总结
什么是MySQL?MySQL 是一种关系型数据库,在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展。阿里巴巴数据库系统也大量用到了 MySQL,因此它的稳定性是有保障的。MySQL是开放源代码的,因此任何人都可以在 GPL(General Public License) 的许可下下载并根据个性化的需要对其进行修改。MySQL的默认端口号是3306。存储引擎一...转载 2020-03-10 17:54:52 · 471 阅读 · 0 评论 -
30条MySQL查询的优化方法
以下是广泛使用的30个SQL查询语句优化方法:1、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。2、对查询进行优化,首先应考虑在 where 及 order by 涉及的列上建立索引,避免全表扫描。3、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引,而进行全表扫描,如:select...转载 2020-03-10 16:36:47 · 300 阅读 · 0 评论 -
26条MySQL性能优化的最佳经验
今天,数据库操作越来越成为应用的性能瓶颈。对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构、查询表数据时,都应该注意性能问题。这里,我们不会讲过多的SQL语句的优化,这里我们主要针对MySQL数据库的设计优化。1 使用查询缓存大多数的MySQL服务器都开启了查询缓存(QueryCache)...转载 2020-03-10 16:13:51 · 770 阅读 · 0 评论 -
MySQL中查询select * from a where id in (select id from b )如何提高效率?
对于这条sql语句它的执行计划其实并不是先查询出b表的所有id,然后再与a表的id进行比较。mysql会把in子查询转换成exists相关子查询,所以它实际等同于这条sql语句:select * from a where exists(select * from b where b.id=a.id );而exists相关子查询的执行原理是: 循环取出a表的每一条记录与b表进行比较,比较的条件...原创 2020-03-10 14:20:55 · 10988 阅读 · 0 评论 -
MySQL中key和index的区别
key 是数据库的物理结构,它包含两层意义,一是约束(偏重于约束和规范数据库的结构完整性),二是索引(辅助查询用的)。包括primary key, unique key, foreign key 等。primary key 有两个作用,一是约束作用(constraint),用来规范一个存储主键和唯一性,但同时也在此key上建立了一个index;unique key 也有两个作用,一是约束作用(...转载 2020-03-10 12:52:37 · 330 阅读 · 0 评论 -
一步步分析为什么B+树适合作为索引的结构 以及索引原理
mysql的B+树索引 查找使用了二分查找,redis 跳表也使用了二分查找法,kafka查询消息日志也使用了二分查找法,二分查找法时间复杂度O(logn);参考:redis的索引底层的 跳表原理 实现聊聊Mysql索引和redis跳表 ---redis的跳表原理 时间复杂度O(logn)(阿里)参考:kafka如何实现高并发存储-如何找到一条需要消费的数据(阿里)参考:二分查找法:...转载 2020-03-09 18:34:35 · 408 阅读 · 0 评论 -
为什么mysql索引用B+树而不用哈希表?
Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B+Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于B+Tree 索引。可能很多人又有疑问了,既然 Hash 索引的效率要比B+Tree 高很多,为什么大家不都用Hash索引而还要使用B+ree 索引呢?任何事物都是有两面性的,Hash 索引也一...转载 2020-03-09 15:57:39 · 3110 阅读 · 1 评论 -
MySQL为什么选用自增量作为主键索引
MyISAM存储引擎MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM索引的原理图:这里设表一共有三列,假设我们以Col1为主键,则上图是一个MyISAM表的主索引(Primary key)示意。可以看出MyISAM的索引文件仅仅保存数据记录的地址。在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只...转载 2020-03-09 15:14:50 · 974 阅读 · 0 评论 -
一条sql语句执行很慢的原因有哪些?(待补全)
说实话,这个问题可以涉及到 MySQL 的很多核心知识,可以扯出一大堆,就像要考你计算机网络的知识时,问你“输入URL回车之后,究竟发生了什么”一样,看看你能说出多少了。之前腾讯面试的实话,也问到这个问题了,不过答的很不好,之前没去想过相关原因,导致一时之间扯不出来。所以今天,我带大家来详细扯一下有哪些原因,相信你看完之后一定会有所收获,不然你打我。开始装逼:分类讨论一条 SQL 语句...转载 2020-03-09 13:53:43 · 231 阅读 · 0 评论 -
MySQL锁
数据库锁知识不少人在开发的时候,应该很少会注意到这些锁的问题,也很少会给程序加锁(除了库存这些对数量准确性要求极高的情况下),即使我们不会这些锁知识,我们的程序在一般情况下还是可以跑得好好的。因为这些锁数据库隐式帮我们加了,只会在某些特定的场景下才需要手动加锁。对于UPDATE、DELETE、INSERT语句,InnoDB会自动给涉及数据集加排他锁(X) MyISAM在执行查询语句SE...转载 2019-11-21 11:32:19 · 260 阅读 · 0 评论 -
mysql优化
表的优化与列类型选择定长与变长分离如:id int ,占4个字节,smallint 占2个字节,tinyint 占1个字节,char(n) 占n个字符,也是定长,time也是定长,即每个单元值占的字节是固定的。核心且常用的字段,可以建成定长,放在一张表,而varchar,text,blob 这种变长字段,适合单放一张表,用主键与核心表关联起来。 2.常用字段和不常用字段要分离。需要结...转载 2018-03-19 22:44:01 · 541 阅读 · 0 评论 -
mysql高级排序&高级匹配查询示例
在大多数应用场景下,我们使用mysql进行查询时只会用到'=', '>' , ' 1. 根据状态来排序的查询 假设现在一个记录有四种状态,未处理(0)、正在处理(2)、处理成功(1)、处理失败(4),之所以他们的值是这个样子,是因为我们一般情况下是不会用它去排序,所以自然的就想到这样的一些值赋予意义。但是,在排序的时候怎么处理呢? 假如要求的先后顺序是这样的:未处理>处理失转载 2017-10-26 17:45:03 · 567 阅读 · 0 评论 -
MySQL分库分表总结参考
单库单表单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到。 单库多表 随着用户数量的增加,user表的数据量会越来越大,当数据量达到一定程度的时候对user表的查询会渐渐的变慢,从而影响整个DB的性能。如果使用mysql, 还有一个更严重的问题是,当需要添加一列的时候,mysql会锁表,期间所有的读写转载 2017-10-26 18:11:22 · 351 阅读 · 0 评论 -
MySQL数据高级查询之连接查询、联合查询、子查询
连接查询连接查询: 将多张表(>=2)进行记录的连接(按照某个指定的条件进行数据拼接)。连接查询的意义: 在用户查看数据的时候,需要显示的数据来自多张表.连接查询: join, 使用方式: 左表 join 右表;左表: 在join关键字左边的表;右表: 在join关键字右边的表连接查询分类:SQL中将连接查询分成四类: 内连接,外连接,自然连接和交叉连接转载 2017-10-13 15:48:26 · 549 阅读 · 0 评论 -
MySQL 数据库开发的 36 条军规
MySQL 数据库开发的 36 条军规写在前面的话:总是在灾难发生后,才想起容灾的重要性;总是在吃过亏后,才记得曾经有人提醒过。(一)核心军规(1)不在数据库做运算:cpu计算务必移至业务层(2)控制单表数据量:单表记录控制在1000w(3)控制列数量:字段数控制在20以内(4)平衡范式转载 2017-05-08 17:07:10 · 393 阅读 · 0 评论 -
MySQL分库分表的一些技巧
分表是分散数据库压力的好方法。 分表,最直白的意思,就是将一个表结构分为多个表,然后,可以再同一个库里,也可以放到不同的库。 当然,首先要知道什么情况下,才需要分表。个人觉得单表记录条数达到百万到千万级别时就要使用分表了。 1,分表的分类 1>纵向分表 将本来可以在同一个表的内容,人为划分为多个表。(所谓的本来,是指按照关系型数据库的第三范式要求,是应该在同一个表的。) 分转载 2017-03-09 18:05:01 · 1083 阅读 · 0 评论 -
MYSQL分库分表总结
单库单表 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到。 单库多表 随着用户数量的增加,user表的数据量会越来越大,当数据量达到一定程度的时候对user表的查询会渐渐的变慢,从而影响整个DB的性能。如果使用mysql, 还有一个更严重的问题是,当需要添加一列的时候,mysql会锁表,期间所有转载 2017-03-09 17:48:39 · 2231 阅读 · 0 评论