四 、Mysql 开发

news2024/11/25 0:28:38

四 、Mysql开发

102 可以使用MySQL直接存储文件吗?
可以使用 BLOB (binary large object),用来存储二进制大对象的字段类型。
TinyBlob 255 值的长度加上用于记录长度的1个字节(8位)
Blob 65K值的长度加上用于记录长度的2个字节(16位)
MediumBlob 16M值的长度加上用于记录长度的3个字节(24位)
LongBlob 4G 值的长度加上用于记录长度的4个字节(32位)。

103 什么时候存,什么时候不存?
存:需要高效查询并且文件很小的时候
不存:文件比较大,数据量多或变更频繁的时候

104 存储的时候有遇到过什么问题吗?

  1. 上传数据过大sql执行失败 调整max_allowed_packet
  2. 主从同步数据时比较慢
  3. 应用线程阻塞
  4. 占用网络带宽
  5. 高频访问的图片无法使用浏览器缓存

105 Emoji乱码怎么办?
使用utf8mb4
MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的
unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,一般情况
下使用utf8也就够了。

106 如何存储ip地址?

  1. 使用字符串
  2. 使用无符号整型
    4个字节即解决问题
    可以支持范围查询
    INET_ATON() 和 INET_NTOA() ipv6 使用 INET6_ATON() 和 INET6_NTOA()

107 长文本如何存储?
可以使用Text存储
TINYTEXT(255长度)
TEXT(65535)
MEDIUMTEXT(int最大值16M)
LONGTEXT(long最大值4G)

108 大段文本如何设计表结构?

  1. 或将大段文本同时存储到搜索引擎
  2. 分表存储
  3. 分表后多段存储

109 大段文本查找时如何建立索引?

  1. 全文检索,模糊匹配最好存储到搜索引擎中
  2. 指定索引长度
  3. 分段存储后创建索引
    110 有没有在开发中使用过TEXT,BLOB 数据类型
    BLOB 之前做ERP的时候使用过,互联网项目一般不用BLOB
    TEXT 文献,文章,小说类,新闻,会议内容 等
    111 日期,时间如何存取?
  4. 使用 TIMESTAMP,DATETIME
  5. 使用字符串
    112 TIMESTAMP,DATETIME 的区别是什么?
    跨时区的业务使用 TIMESTAMP,TIMESTAMP会有时区转换

数据类型 MySQL 5.6.4之前需要存储 MySQL 5.6.4之后需要存储
DATETIME 8 bytes 5 bytes + 小数秒存储
TIMESTAMP 4 bytes 4 bytes + 小数秒存储
分秒数精度 存储字节大小
0 0 bytes
1,2 1 bytes
3,4 2 bytes
5,6 3 bytes
1、两者的存储方式不一样:
对于TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,
将其又转化为客户端当前时区进行返回。
而对于DATETIME,不做任何改变,基本上是原样输入和输出。

2、存储字节大小不同
在这里插入图片描述
3、两者所能存储的时间范围不一样:
timestamp所能存储的时间范围为:‘1970-01-01 00:00:01.000000’ 到 ‘2038-01-19
03:14:07.999999’。
datetime所能存储的时间范围为:‘1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’。

113 为什么不使用字符串存储日期?
字符串无法完成数据库内部的范围筛选
在大数据量存储优化索引时,查询必须加上时间范围

114 如果需要使用时间戳 timestamp和int该如何选择?
int 存储空间小,运算查询效率高,不受时区影响,精度低
timestamp 存储空间小,可以使用数据库内部时间函数比如更新,精度高,需要注意时区转换,
timestamp更易读
一般选择timestamp,两者性能差异不明显,本质上存储都是使用的int

115 char与varchar的区别?如何选择?
1.char的优点是存储空间固定(最大255),没有碎片,尤其更新比较频繁的时候,方便数据文件指针的
操作,所以存储读取速度快。缺点是空间冗余,对于数据量大的表,非固定长度属性使用char字段,空
间浪费。
2.varchar字段,存储的空间根据存储的内容变化,空间长度为L+size,存储内容长度加描述存储内容长
度信息,优点就是空间节约,缺点就是读取和存储时候,需要读取信息计算下标,才能获取完整内容。

116 财务计算有没有出现过错乱?
第一类:锁包括多线程,数据库,UI展示后超时提交等
第二类:应用与数据库浮点运算精度丢失

  1. 应用开发问题:多线程共享数据读写,
  2. 之前有过丢失精度的问题,使用decimal解决
  3. 使用乘法替换除法
  4. 使用事务保证acid特性
  5. 更新时使用悲观锁 SELECT … FOR UPDATE
  6. 数据只有标记删除
  7. 记录详细日志方便溯源

117 decimal与float,double的区别是什么?
float:浮点型,4字节,32bit。
double:双精度实型,8字节,64位
decimal:数字型,128bit,不存在精度损失
对于声明语法DECIMAL(M,D),自变量的值范围如下:
M是最大位数(精度),范围是1到65。可不指定,默认值是10。
D是小数点右边的位数(小数位)。范围是0到30,并且不能大于M,可不指定,默认值是0。
例如字段 salary DECIMAL(5,2),能够存储具有五位数字和两位小数的任何值,因此可以存储在salary列
中的值的范围是从-999.99到999.99。

18 浮点类型如何选型?为什么?
需要不丢失精度的计算使用DECIMAL
仅用于展示没有计算的小数存储可以使用字符串存储
低价值数据允许计算后丢失精度可以使用float double
整型记录不会出现小数的不要使用浮点类型

119 预编译sql是什么?
完整解释:
https://dev.mysql.com/doc/refman/8.0/en/prepare.html
PreparedStatement

120 预编译sql有什么好处?
预编译sql会被mysql缓存下来
作用域是每个session,对其他session无效,重新连接也会失效
提高安全性防止sql注入
select * from user where id =?
“1;delete from user where id = 1”;
编译语句有可能被重复调用,也就是说sql相同参数不同在同一session中重复查询执行效率明显比
较高
mysql 5,8 支持服务器端的预编译

121 子查询与join哪个效率高?
子查询虽然很灵活,但是执行效率并不高。

122 为什么子查询效率低?
在执行子查询的时候,MYSQL创建了临时表,查询完毕后再删除这些临时表
子查询的速度慢的原因是多了一个创建和销毁临时表的过程。
而join 则不需要创建临时表 所以会比子查询快一点

123 join查询可以无限叠加吗?Mysql对join查询有什么限制吗?
建议join不超过3张表关联,mysql对内存敏感,关联过多会占用更多内存空间,使性能下降
Too many tables; MySQL can only use 61 tables in a join;
系统限制最多关联61个表

124 join 查询算法了解吗?
Simple Nested-Loop Join:SNLJ,简单嵌套循环连接
Index Nested-Loop Join:INLJ,索引嵌套循环连接
Block Nested-Loop Join:BNLJ,缓存块嵌套循环连接

125 如何优化过多join查询关联?
适当使用冗余字段减少多表关联查询
驱动表和被驱动表(小表join大表)
业务允许的话 尽量使用inner join 让系统帮忙自动选择驱动表
关联字段一定创建索引
调整JOIN BUFFER大小

126 是否有过mysql调优经验?
调优:

  1. sql调优
  2. 表(结构)设计调优
  3. 索引调优
  4. 慢查询调优
  5. 操作系统调优
  6. 数据库参数调优
    127 开发中使用过哪些调优工具?
    官方自带:
    EXPLAIN
    mysqldumpslow
    show profiles 时间
    optimizer_trace
    第三方:性能诊断工具,参数扫描提供建议,参数辅助优化

**128 如何监控线上环境中执行比较慢的sql? 129 如何分析一条慢sql?130 如何查看当前sql使用了哪个索引?
可以使用EXPLAIN,选择索引过程可以使用 optimizer_trace
131 索引如何进行分析和调优?
132 EXPLAIN关键字中的重要指标有哪些? **
详解文章
https://blog.csdn.net/weixin_45817985/article/details/132085347

133 MySQL数据库cpu飙升的话你会如何分析
重点是定位问题。

1 使用top观察mysqld的cpu利用率

  1. 切换到常用的数据库
  2. 使用show full processlist;查看会话
  3. 观察是哪些sql消耗了资源,其中重点观察state指标
  4. 定位到具体sql

2 pidstat

  1. 定位到线程
  2. 在PERFORMANCE_SCHEMA.THREADS中记录了thread_os_id 找到线程执行的sql
  3. 根据操作系统id可以到processlist表找到对应的会话
  4. 在会话中即可定位到问题sql

3 使用show profile观察sql各个阶段耗时
4 服务器上是否运行了其他程序
5 检查一下是否有慢查询
6 pref top
使用pref 工具分析哪些函数引发的cpu过高来追踪定位

134 某个表有数千万数据,查询比较慢,如何优化?说一下思路

  1. 前端优化 减少查询
  2. 合并请求:多个请求需要的数据尽量一条sql拿出来
  3. 会话保存:和用户会话相关的数据尽量一次取出重复使用
  4. 避免无效刷新
  5. 多级缓存 不要触及到数据库
  6. 应用层热点数据高速查询缓存(低一致性缓存)
  7. 高频查询大数据量镜像缓存(双写高一致性缓存)
  8. 入口层缓存(几乎不变的系统常量)
  9. 使用合适的字段类型,比如varchar换成char
  10. 一定要高效使用索引。
  11. 使用explain 深入观察索引使用情况
  12. 检查select 字段最好满足索引覆盖
  13. 复合索引注意观察key_len索引使用情况
  14. 有分组,排序,注意file sort,合理配置相应的buffer大小
  15. 检查查询是否可以分段查询,避免一次拿出过多无效数据
  16. 多表关联查询是否可以设置冗余字段,是否可以简化多表查询或分批查询
  17. 分而治之:把服务拆分成更小力度的微服务
  18. 冷热数据分库存储
  19. 读写分离,主被集群 然后再考虑分库分表

  20. 135 count(列名)和 count(*)有什么区别?
    count()是 SQL92 定义的
    标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。

count(*) :对全表统计,比如一百行的表 有一列name的80行为空 此时统计的还是100

count(列名):只对一列进行统计,上面的情况count(name)就是99

如果忽略意义上的不同单独从效率上来说:

1)count(列名)在此列是主键的时候一定是快于count((*)的

2)在此列是索引的时候

  如果索引列不非空那么 count(*)无法使用索引 所以要慢

 如果索引非空 那么基本一样快

另外,count(列名)是和列的偏移有关的,偏移越大,代价越大,所以常用的列应该尽量排放在前面。

说明:count()会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行

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

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

相关文章

AutoJS自定义悬浮菜单(附完整代码)

我们在开发Autojs脚本时,需要使用到悬浮窗功能来控制脚本。那么到底要如何来做呢?今天给大家分享一些,先来看看效果: 调整移动和贴边。 防止滑出屏幕 附上完整代码 var storage storages.create("日赚3万_短视频合集&quo…

以Java的方式将文件上传到阿里云OSS

文章目录 1. 开通对象存储服务2. 创建 AccessKey 密钥3. 通用代码实现 1. 开通对象存储服务 控制台 → 对象存储 OSS → 立即开通 Bucket列表 → 点击创建 Bucket 填写名称、地域,名称创建后不可修改,地域选择最近的,存储类型选择标准存储&…

OpenCV: 对“google::protobuf::internal::Release_CompareAndSwap”的未定义

解决办法: 需要在文件 protobuf/src/google/protobuf/stubs/atomicops_internals_generic_gcc.h 中的以下补丁 inline Atomic64 Release_CompareAndSwap(volatile Atomic64* ptr, Atomic64 old_value, …

Ajax-AJAX请求的不同发送方式

🥔:你一定能成为想要成为的人 发送AJAX请求不同方式 发送AJAX请求不同方式1、jQuery发送AJAX请求2、axios发送AJAX请求(重点)3、fetch发送AJAX请求 发送AJAX请求不同方式 1、jQuery发送AJAX请求 首先需要jquery的js文件&#xf…

Linux shell yes命令(不停输出换行的y)(不停输出换行的指定字符串)(脚本自动确认y)

文章目录 yes命令功能doc文档英文中文翻译完整文档 示例应用案例自动为脚本多次确认y yes命令功能 yes命令可以不断地输出换行的指定字符串,不加参数时,不断输出换行的“y”,有时我们需要执行一些需要用户键入“y”确认的脚本,但…

挖掘Java集合:深入探索List接口与HashSet

文章目录 引言LinkedList:双向链表的实现构造方法LinkedList中的常用方法HashSet:无序且唯一的集合HashSet的实现方式LinkedHashSet:有序且唯一可变长度参数结论 引言 在广阔的Java编程领域中,集合就如同宝库,提供了多…

Clickhouse学习系列——一条SQL完成gourp by分组与不分组数值计算

笔者在近一两年接触了Clickhouse数据库,在项目中也进行了一些实践,但一直都没有一些技术文章的沉淀,近期打算做个系列,通过一些具体的场景将Clickhouse的用法进行沉淀和分享,供大家参考。 首先我们假设一个Clickhouse数…

python基础3——流程控制

文章目录 一、操作符1.1 比较操作符1.2 逻辑操作符1.3 成员操作符1.4 身份操作符 二、流程控制2.1 条件判断2.2 循环语句2.2.1 for循环2.2.2 while循环 2.3 continue与break语句2.4 文件操作函数 三、函数3.1 定义函数3.2 作用域3.3 闭包3.4 函数装饰器3.5 内建函数 一、操作符…

一文看懂 D类数字功放原理及应用

他V hezkz17进数字音频系统研究开发交流答疑群(课题组) D类放大器工作在开关状态,作为控制元件的晶体管本身消耗功率较低,功放的效 率就高,可达 90%以上,因此能较大地降低能源损耗,减小放大器体积。D 类音 频功率放大器…

面试热题(最长上升子序列)

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 输入&#xff1…

Docker容器监控(Cadvisor +Prometheus+Grafana)

环境部署,接着上一篇文章Docker容器部署(Cadvisor InfluxDBGrafana)开始 目录 1、先清理一下容器 2、部署Cadvisor 3、访问Cadvisor页面 4、部署Prometheus 5、准备配置 6、运行prometheus容器 7、访问prometheus页面 8、部署Grafan…

录屏怎么录声音?很简单,轻松操作!

“录屏的时候怎么把声音录进去呀?今天用手机录了一段视频,录完后打开却发现没有声音,真的服了,录了好久了,有没有人知道怎么才能录制声音呀?” 录屏是一种非常实用的技术,可以帮助我们记录屏幕…

PHPstudy配置伪静态步骤,tp5.1的框架

搜索mod_rewrite.so&#xff0c;然后去掉前面的#&#xff08;即放开注释&#xff09; 2.找到index.php 同级文件.htaccess&#xff08;没有就新建&#xff09; 这些是tp5.1自带的内容&#xff0c;把它注释掉&#xff0c;是错误的内容&#xff0c;添加下面的这段配置 #<If…

SIT1042AQ5V 供电,IO 口兼容 3.3V,±58V 总线耐压,CAN FD 待机模式总线收发器

等领域&#xff0c;支持 5Mbps 灵活数据速率 CAN FD &#xff0c;具有在总线与 CAN 协议控制器之间进行差分信号传 输的能力。 SIT1042AQ 为 SIT1042Q 芯片的升级版本&#xff0c;改善了总线信号的对称性&#xff0c;拥有更低的电磁辐射性能。 另外&#xff0c;SIT104…

ffplay数据结构分析(一)

本文为相关课程的学习记录&#xff0c;相关分析均来源于课程的讲解&#xff0c;主要学习音视频相关的操作&#xff0c;对字幕的处理不做分析 下面我们对ffplay的相关数据结构进行分析&#xff0c;本章主要是对PacketQueue的讲解 struct MyAVPacketList和PacketQueue队列 ffp…

线程池-手写线程池C++11版本(生产者-消费者模型)

本项目是基于C11的线程池。使用了许多C的新特性&#xff0c;包含不限于模板函数泛型编程、std::future、std::packaged_task、std::bind、std::forward完美转发、std::make_shared智能指针、decltype类型推断、std::unique_lock锁等C11新特性功能。 本项目有一定的上手难度。推…

浏览器是如何渲染页面的?

浏览器是如何渲染页面的&#xff1f; 当浏览器的网络线程收到 HTML 文档后&#xff0c;会产生一个渲染任务&#xff0c;并将其传递给渲染主线程的消息队列。 在事件循环机制的作用下&#xff0c;渲染主线程取出消息队列中的渲染任务&#xff0c;开启渲染流程。 整个渲染流程分…

对员工画饼out了,领导力之我的地盘TA做主

90后的员工为什么爱离职? 我想了一年&#xff0c;才嗅到一丝隐晦的内味。因为不结婚、不生娃、不买房、不买车&#xff0c;没压力&#xff0c;骂TA还敢顶嘴。 员工动力不足&#xff0c;没有干劲&#xff0c;宁愿熬夜打游戏&#xff0c;也不愿意多加班&#xff0c;到底是工资…

Springboot03--restful、swagger+orm/mybatis,mybatis-plus

参考这个方法配置&#xff0c;主要是我的springboot和swagger的版本号的问题 SpringBoot2.7.14集成Swagger3.0 (liqinglin0314.com) 常用的一些注解 放在controller里面 2. mybatisplus <!-- MyBatisPlus依赖--><dependency><groupId>com.baomidou</gr…

FL Studio低版本怎么免费升级:FL Studio升级要钱吗?

为了更好的服务国内FL Studio用户&#xff0c;FL Studio 官网提供了跨版本升级的服务&#xff0c;用户可以通过缴纳一定的费用&#xff0c;将自己已购买的入门版或其他非完整版的版本&#xff0c;升级为更高的版本&#xff0c;解锁更多的插件&#xff0c;而无需重新购买整套版本…