当前位置: 首页 > article >正文

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.kler.cn/a/372194.html

相关文章:

  • Mybatis分页插件的使用问题记录
  • Pytorch | 从零构建ParNet/Non-Deep Networks对CIFAR10进行分类
  • Java - 日志体系_Apache Commons Logging(JCL)日志接口库
  • GraalVM完全指南:云原生时代下使用GraalVM将Spring Boot 3应用转换为高效Linux可执行文件
  • Vue2四、 scoped样式冲突,data是一个函数,组件通信-父传子-子传父-非父子
  • 高级的SQL查询技巧有哪些?
  • Nginx 配置基于IP 地址的 Web 服务器
  • 「Mac畅玩鸿蒙与硬件13」鸿蒙UI组件篇3 - TextInput 组件获取用户输入
  • selenium学习日记
  • Elasticsearch 安装教程:驾驭数据海洋的星际导航仪
  • [快速阅读八] Matlab中bwlookup的实现及其在计算二值图像的欧拉数、面积及其他morph变形中的应用。...
  • 建筑行业内部知识库的重要性与实施策略
  • 在MySQL中存储IP地址的最佳实践
  • 四、鸿蒙开发-常用布局(线性布局、层叠布局、弹性布局、网格布局、列表布局)
  • kubeadm部署安装
  • SOLID - 依赖倒置原则(Dependency Inversion Principle)
  • 流媒体协议.之(RTP,RTCP,RTSP,RTMP,HTTP)(二)
  • 如何使用python完成时间序列的数据分析?
  • QTreeWidget使用记录(1)
  • 使用linux+nginx 作为unity webgl的服务器
  • 告别资源荒!哎哟喂啊盘搜及其他良心网盘搜索引擎推荐
  • HTML--浮动布局练习
  • unity3d——单例模式,加载单例模式类问题
  • 力姆泰克伺服电动缸的优势有哪些
  • ML2021Spring-hw1(COVID-19 Cases Prediction)
  • 百度SEO分析实用指南 提升网站搜索排名的有效策略