mysql基本知识

228 阅读4分钟

1. mysql中的数据类型有哪些?每种数据类型占多少字节?

  1. 数值类型:

    • TINYINT:占用1个字节,有符号范围是-128到127,无符号范围是0到255。
    • SMALLINT:占用2个字节,有符号范围是-32768到32767,无符号范围是0到65535。
    • MEDIUMINT:占用3个字节,有符号范围大约是-8388608到8388607。
    • INT或INTEGER:占用4个字节,有符号范围是-2147483648到2147483647。
    • BIGINT:占用8个字节,有符号范围是大约-9223372036854775808到9223372036854775807。
  2. 浮点数和定点数类型:

    • FLOAT:占用4个字节,单精度浮点数。
    • DOUBLE或DOUBLE PRECISION:占用8个字节,双精度浮点数。
    • DECIMAL(M, D) 或 NUMERIC(M, D):实际占用的字节数取决于M(总有效数字位数)和D(小数点后的位数),计算方法通常是 (M+2)*(D+1)/2 + 1 字节(当M <= 9时,若M > 9则按实际规则计算存储空间)。
  3. 日期和时间类型:

    • YEAR:占用1个字节,存储年份。
    • TIME:占用3、4或8个字节,根据精度不同。
    • DATE:占用3个字节,存储日期信息。
    • DATETIME:占用8个字节,存储日期和时间信息。
    • TIMESTAMP:占用4或7个字节,存储时间戳,依赖于MySQL版本和配置。
  4. 字符串类型:

    • CHAR(M):固定长度,占用M字节,1 <= M <= 255,对于多字节字符集如UTF-8,每个字符可能会占用多个字节。
    • VARCHAR(M):变长字符串,占用L+1字节,L是实际字符长度,1 <= L <= M且1 <= M <= 255,在UTF-8编码下,每个字符仍然可能占用多个字节。
    • TINYBLOB/TINYTEXT:实际内容加1字节,内容长度小于2^8字节。
    • BLOB/TEXT:实际内容加2字节,内容长度小于2^16字节。
    • MEDIUMBLOB/MEDIUMTEXT:实际内容加3字节,内容长度小于2^24字节。
    • LONGBLOB/LONGTEXT:实际内容加4字节,内容长度小于2^32字节。
    • ENUM:存储枚举值,每个枚举值占用1或2个字节,取决于枚举值的数量(最多65535个)。
    • SET:存储集合,占用字节数由集合内元素数量决定,可以是1、2、3、4或8个字节,最大成员数为64。

2. mysql中,一个中文字符在不同编码方式下各占多少字节?

一个中文字符在MySQL中使用不同编码方式时,通常占据的字节数如下:

  • GBK:2个字节
  • UTF-8:通常3个字节,极少数情况下4个字节
  • UTF-16:通常2个字节,对于扩展区汉字可能是4个字节
  • UTF-32:始终4个字节
  • ASCII和ISO-8859-1:不支持直接存储中文字符,若强行存储,字节数不确定且可能导致乱码

3. 说说MySQL中sql的优化?explain有什么用?

  • 避免全表扫描,合理使用索引;
  • 减少子查询,改写为JOIN联表操作;
  • 避免使用NOT IN、!=等不易利用索引的操作符;
  • 适当使用覆盖索引(查询只需要从索引中获取所需列而无需访问数据行);

explain的作用:

  1. 查询执行计划分析

    • EXPLAIN命令允许开发者查看MySQL对特定SELECT语句(以及其他支持的语句类型如DELETEINSERTREPLACEUPDATE)的执行计划。这包括MySQL决定如何连接表、使用的索引、数据读取顺序、操作类型(如全表扫描、索引扫描、临时表等)以及预期的行数。
  2. 索引使用诊断

    • EXPLAIN结果显示了MySQL是否正确地使用了已有的索引,以及是否存在未使用索引导致全表扫描的情况。如果发现预期的索引未被使用,可能需要重新审视查询语句或索引设计。
  3. 查询性能预测

    • EXPLAIN输出提供了查询可能涉及的数据行数量(rows),有助于评估查询的潜在成本。大量的行数往往意味着较低的查询效率,可能需要进一步优化。