• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 优化MySQL数据类型

    优化数值数据

    • 对于可以表示为字符串或数字的唯一ID或其他值,与字符串列相比,首选数字列。由于大数值可以比相应字符串存储在更少的字节中,因此它传输速度更快,并且占用更少的内存来进行比较。
    • 如果使用数字数据,则在许多情况下(通过实时连接)从数据库访问信息的访问要比访问文本文件更快。数据库中的信息可能以比文本文件更紧凑的格式存储,因此访问它涉及较少的磁盘访问。您还可以将代码保存在应用程序中,因为可以避免解析文本文件来查找行边界和列边界。

    优化字符和字符串类型

    对于字符和字符串列,请遵循以下准则:

    • 当您不需要特定于语言的排序规则功能时,请使用二进制排序规则顺序进行快速比较和排序操作。您可以使用BINARY运算符在特定查询中使用二进制排序规则。
    • 比较来自不同列的值时,请尽可能声明具有相同字符集和排序规则的那些列,以避免在运行查询时进行字符串转换。
    • 对于小于8KB的列值,请使用二进制VARCHAR而不是BLOB。该GROUP BYORDER BY条款可以生成临时表,这些临时表可以使用的MEMORY存储引擎,如果原来的表不包含任何BLOB列。
    • 如果表包含名称和地址之类的字符串列,但是许多查询未检索到这些列,请考虑将字符串列拆分为单独的表,并在必要时使用带有外键的联接查询。当MySQL从一行中检索任何值时,它将读取一个包含该行所有列(可能还有其他相邻行)的数据块。保持每行较小,仅使用最常使用的列,可以使更多行适合每个数据块。这样的紧凑表减少了常见查询的磁盘I / O和内存使用量。
    • 当您将随机生成的值用作InnoDB表中的主键时,请尽可能在其前面加上一个升序值,例如当前日期和时间。当连续的主值在物理上彼此靠近存储时,InnoDB可以更快地插入和检索它们。
    • 有关为何数字列通常比等效字符串列更可取的原因,

    优化BLOB类型

    • 当存储包含文本数据的大blob时,请考虑首先对其进行压缩。当整个表由InnoDB或压缩时,请勿使用此技术MyISAM
    • 对于具有多个列的表,为了减少不使用BLOB列的查询的内存需求,请考虑将BLOB列拆分为一个单独的表,并在需要时使用联接查询对其进行引用。
    • 由于检索和显示BLOB值的性能要求可能与其他数据类型完全不同,因此可以将特定于BLOB的表放在不同的存储设备上,甚至放在单独的数据库实例上。例如,检索BLOB可能需要读取较大的顺序磁盘,这比传统的SSD更适合传统硬盘驱动器。
    • 有关为什么有时有时使用二进制列优于等效的BLOB列的原因,请VARCHAR
    • 您可以将列值的哈希存储在单独的列中,对该列进行索引并在查询中测试该哈希值,而不是针对非常长的文本字符串测试是否相等。(使用MD5()CRC32()函数生成哈希值。)由于哈希函数可以为不同的输入生成重复的结果,因此您仍然在查询中包括一个子句以防止错误匹配。性能优势来自较小,易于扫描的哈希值索引。AND blob_column= long_string_value