MySQL数据类型——针对实习面试

目录

  • MySQL字段类型分类
  • char和varchar的区别
  • null和“ ”的区别
  • datetime和timestamp的区别
  • 为什么在MySQL中不推荐使用text或blob类型
  • MySQL中如何表示布尔类型
  • 在设计数据库中,如何优化性能(一般不会问那么深,了解就行)

MySQL字段类型分类

在这里插入图片描述

数值类型:

  • 整形:tinyint、smallint、mediumint、int、bigint
  • 浮点型:float、double
  • 定点型:decimal

字符串类型:

  • 常用:char、varchar
  • TEXT类:tintext、text、mediumtext、longtext
  • BLOB类:tinyblob、mediumblob、blob、longblob

日期时间类型:

  • 常用:year、time、date、detatime、timestamp

char和varchar的区别

char是一种固定长度的字符串数据类型,varchar是一种可变长度的字符串数据类型

对于CHAR,无论实际存储的数据是否达到指定的长度,都会使用固定的存储空间,这可能会导致存储空间的浪费;
对于VARCHAR,存储空间的使用更加灵活和高效,因为它只分配必要的空间加上一个长度字节。

CHAR的使用场景:当你知道所有数据接近固定长度时,例如存储性别、国家、代码。
VARCHAR的使用场景:当数据长度变化较大时,可以节省存储空间,更加灵活。

null和“ ”的区别

null表示一个未知或不存在的值,它是一个特殊的值,用来表示字段中没有数据,它在逻辑上表示“没有值”,并不是一个空的字符串或者空格

“ ”空字符串是指一个长度为0的祖父串,它实际上是存在的,只是不包括任何字符

datetime和timestamp的区别

DATE类型用于存储日期,格式为YYYY-MM-DD;TIME类型用于存储时间,格式为HH:MM:SS;
DATETIME类型用于存储日期和时间,格式为YYYY-MM-DD HH:MM:SS。
选择合适的数据类型可以根据需要存储的信息的精确度和范围来决定。

为什么在MySQL中不推荐使用text或blob类型

  1. 性能问题:TEXT和BLOB类型用于存储大量数据,当这些数据量过大时,它们可能会被存储在数据页之外的溢出页中,这会增加查询时的IO操作,从而影响性能
  2. 索引效率低下:TEXT和BLOB类型难以建立有效的索引,导致查询性能下降
  3. 不能有默认值
  4. 不能直接创建索引,需要指定前缀长度

MySQL中如何表示布尔类型

MySQL中没有专门的布尔类型,而是用TINYINT(1)类型来表示布尔值。TINTINT(1)类型可以存储0或1,分别对应fales或true

在设计数据库中,如何优化性能(一般不会问那么深,了解就行)

在设计数据库时,优化性能是一个多方面考虑的过程,涉及到数据库的结构、查询、索引、服务器配置等多个层面。以下是一些常见的优化策略:

  1. 合理的表结构设计

    • 避免过度规范化,也避免过度反规范化。
    • 使用合适的数据类型,尽量使用固定长度类型,如INTCHAR
    • 避免使用大的TEXTBLOB字段,如果必须使用,考虑将它们存储在单独的表中,并使用外键关联。
  2. 索引优化

    • 为经常作为查询条件的列创建索引,但避免过度索引,因为索引虽然可以加快查询速度,但会减慢插入和更新速度,并增加存储空间。
    • 使用合适的索引类型,如B-tree、Hash、R-tree等。
    • 考虑索引的前缀长度,特别是对于VARCHAR类型的字段。
    • 定期分析和优化索引,移除不再使用的索引。
  3. 查询优化

    • 避免使用SELECT *,只选择需要的列。
    • 使用JOIN而不是子查询,特别是在处理关联查询时。
    • 避免在WHERE子句中使用函数或表达式,这可能会导致索引失效。
    • 使用EXPLAIN分析查询计划,查看是否使用了索引以及如何优化。
  4. 服务器配置

    • 根据负载和硬件配置调整innodb_buffer_pool_sizemax_connections等参数。
    • 调整query_cache_size(如果使用查询缓存)。
    • 设置合适的max_allowed_packet大小。
  5. 分区

    • 对于大型表,使用分区可以提高查询效率,减少I/O操作。
  6. 使用合适的存储引擎

    • 根据业务需求选择合适的存储引擎,如InnoDB、MyISAM、Memory等。
  7. 避免大事务

    • 减少事务的大小和持续时间,以减少锁定资源的时间。
  8. 使用缓存

    • 利用应用层缓存(如Redis、Memcached)减少数据库访问压力。
  9. 读写分离

    • 在高并发读操作的场景下,使用主从复制和读写分离可以提高性能。
  10. 定期维护

    • 定期进行数据库维护,如优化表(OPTIMIZE TABLE)、重建索引、清理碎片等。
  11. 监控和分析

    • 使用监控工具监控数据库性能,分析慢查询日志,找出性能瓶颈。
  12. 数据归档

    • 对于历史数据,可以归档到单独的表或数据库中,以减少主表的大小和复杂度。
  13. 避免复杂的视图和存储过程

    • 复杂的视图和存储过程可能会影响性能,应谨慎使用。
  14. 使用批处理

    • 对于批量操作,使用批处理而不是单个操作可以减少数据库交互次数。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【有啥问啥】视频插帧算法技术原理详解

视频插帧算法技术原理详解 引言 视频插帧(Video Interpolation)技术,作为计算机视觉领域的一项重要应用,旨在通过算法手段在已有的视频帧之间插入额外的帧,从而提升视频的帧率,使其看起来更加流畅。这一技…

我在命令行下学日语

同一个动作重复 300 遍,肌肉就会有记忆,重复 600 遍,脊柱就会有记忆,学完五十音图不熟练,经常遗忘或者要好几秒才想得起来一个怎么办?没关系,我做了个命令行下的小游戏 KanaQuiz 来帮助你记忆&a…

开源一个开发的聊天应用与AI开发框架,集成 ChatGPT,支持私有部署的源码

大家好,我是一颗甜苞谷,今天分享一个开发的聊天应用与AI开发框架,集成 ChatGPT,支持私有部署的源码。 介绍 当前系统集成了ChatGPT的聊天应用,不仅提供了基本的即时通讯功能,还引入了先进的AI技术&#x…

【C++滑动窗口】2653. 滑动子数组的美丽值|1785

本文涉及的基础知识点 C算法:滑动窗口及双指针总结 C堆(优先队列) LeetCode2653. 滑动子数组的美丽值 给你一个长度为 n 的整数数组 nums ,请你求出每个长度为 k 的子数组的 美丽值 。 一个子数组的 美丽值 定义为:如果子数组中第 x 小整数…

HarmonyOS NEXT: 抓住机遇,博

鸿蒙生态崛起:开发者如何抓住机遇,创造卓越应用体验 鸿蒙系统的崛起与优势开发者面临的机遇与挑战解决方案与前景分析开发人员学习路径 在移动操作系统领域,安卓(Android)和苹果iOS系统长期占据主导地位。然而&#xf…

django5入门【04】Django框架配置文件说明:settings.py

文章目录 1. 基础路径配置2. 启动模式配置3. 站点访问权限配置4. App配置5. 中间件配置6. 模板配置7. 数据库配置8. 路由配置9. 语言与时区配置10. 静态文件配置11. 总结 1. 基础路径配置 在settings.py文件中,通过BASE_DIR配置项来绑定项目的绝对路径。这个路径是…

ZeroNL2SQL:零样本 NL2SQL

发布于:2024 年 10 月 30 日 星期三 #RAG #NL2SQL # Zero-Shot 自然语言到 SQL(NL2SQL)的转换是一个重要的研究领域,它允许非技术用户轻松访问和分析数据,在商业智能、数据分析等领域具有广泛的应用前景。然而&#x…

nginx配置https及url重写

nginx配置https及url重写 一、https简介1、安全访问2、数据的安全性3、数据的完整性3、身份的真实性 二、配置https网站1、环境规划2、部署私有CA3、部署https的虚拟主机 三、URL重写1、语法 四、location的写法1、语法2、location uri {}3、location ~ uri { }4、location ~*…

【安全解决方案】深入解析:如何通过CDN获取用户真实IP地址

一、业务场景 某大型互联网以及电商公司为了防止客户端获取到真实的ip地址,以及达到保护后端业务服务器不被网站攻击,同时又可以让公安要求留存网站日志和排查违法行为,以及打击犯罪的时候,获取不到真实的ip地址,发现…

4. 日志系统实现

log.h 文件定义了一个单例模式的日志类 Log,用于记录系统日志。 单例设计模式: 主要功能 根据上述分析,这个日志类 Log 主要实现了以下功能: 1. 日志写入 该日志类提供了 write_log() 方法用于将日志内容写入文件。日志内容可以…

【SQL】SQL函数

📢 前言 函数 是指一段可以直接被另一段程序调用的程序或代码。主要包括了以下4中类型的函数。 字符串函数数值函数日期函数流程函数 🎄 字符串函数 ⭐ 常用函数 函数 功能 CONCAT(S1,S2,...Sn) 字符串拼接,将S1,S2&#xff0…

论文翻译 | PROMPTAGATOR : FEW-SHOT DENSE RETRIEVAL FROM 8 EXAMPLES

摘要 最近的信息检索研究主要集中在如何从一个任务(通常有丰富的监督数据)转移到其他各种监督有限的任务上,其隐含的假设是从一个任务可以泛化到所有其他任务。然而,这忽略了这样一个事实,即存在许多多样化和独特的检索…

【MySQL】深入理解隔离性

目录 一、数据库并发的场景 1. 读-读并发 2. 读-写并发 3. 写-写并发 二、多版本并发控制( MVCC ) 2.1.MVCC的核心思想 2.2.MVCC的优势 2.3.MVCC的工作原理 2.4.MVCC的应用场景 三、理解MVCC 3.1. 3个记录隐藏字段 3.2.undo日志 4.快照的概…

目录遍历漏洞

目录遍历 目录 概念漏洞分析 加密型传递参数编码绕过目录限定绕过绕过文件后缀过滤(截断上传原理) 漏洞挖掘 访问图片文件测试时去掉文件名只访问目录路径搜索引擎谷歌关键字 pikachu目录遍历 目录遍历与任意文件下载其实差不多,但是如果目录遍历比如etc/passwd只能看不能下…

GitLab在Linux上的详细部署教程并实现远程代码管理与协作

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 前言 本文主要介绍如何在Linux CentOS8 中搭建GitLab私有仓库并且结合内网穿透工具实现在公网…

LC:贪心题解

文章目录 376. 摆动序列 376. 摆动序列 题目链接:https://leetcode.cn/problems/wiggle-subsequence/description/ 这个题目自己首先想到的是动态规划解题,贪心解法真的非常妙,参考下面题解:https://leetcode.cn/problems/wiggle…

Javaee:阻塞队列和生产者消费者模型

文章目录 什么是阻塞队列java中的主要阻塞队列生产者消费者模型阻塞队列发挥的作用解耦合削峰填谷 模拟实现阻塞队列put方法take方法生产者消费者模型 什么是阻塞队列 阻塞队列是一种支持阻塞操作的队列,在多线程中实现通线程之间的通信协调的特殊队列 java中的主…

Redis特性和应用场景以及安装

目录 Redis特性 1.数据在内存中存储 2.可编程性 3.可拓展性 4.集群 5.高可用 6.持久化 7.主从复制 8.速度快 Redis的应用场景 1.用作数据库 2.用作缓存或保存会话 3.用作消息队列 Redis 不可以做什么 Redis的安装 Redis特性 Redis 之所以受到如此多公司的⻘睐…

如何在VMware中安全地恢复已删除的快照?

在VMware中是否可以恢复已删除的快照? 答案是肯定的,您有几种方法可以尝试恢复被删除的快照文件: 仅删除了快照描述符文件(如VMname-000000#.vmdk):这种情况下,可以手动重新创建描述符文件&…

强化学习DQN实践(gymnasium+pytorch)

Pytorch官方教程中有强化学习教程,但是很多中文翻译都太老了,里面的代码也不能跑了 这篇blog按照官方最新教程实现,并加入了一些个人理解 工具 gymnasium:由gym升级而来,官方定义:An API standard for rei…