【问题标题】:Group by string optimization按字符串优化分组
【发布时间】:2010-11-29 21:29:00
【问题描述】:

我要将字符串转换为整数以按性能优化分组。

你们觉得这个想法怎么样?

如果适用,那么 PHP 中是否有内置函数可以将字符串转换为唯一整数?

【问题讨论】:

  • 您可以使用 crc32() 函数来创建字符串的唯一整数。或者使用 md5 然后从十六进制转换回base-10。
  • 如果数据只是整数,你为什么要把它存储在字符串列中?您是否衡量过性能成本或收益?
  • @Mauris:CRC-32 只为您提供为每个字符串生成唯一整数的合理概率 - 它绝不是 100% 确定性的。相当小的样本可能会发生冲突——不同的字符串散列到相同的 CRC-32 值。使用更大的散列 - MD5(128 位而不是 32 位)或 SHA-1(160 位)或 SHA-256(错误,你相信 256 位) - 更有可能是唯一的,但转换成本要高得多。
  • @Mauris:我在 Olson 数据库中的时区名称上使​​用了 CRC 算法,并在该集合中遇到了冲突。回想起来,我现在不确定我是在尝试 16 位还是 32 位 CRC,但在数百个名称的样本中,我遇到了冲突。

标签: php database optimization group-by


【解决方案1】:

如果该列中的所有数据都是 int,那么它应该是 int...

您获得的主要优势是 2 个整数之间的比较只需要比较 4 个字节。表示相同数字的字符串(通常)会更长。因此,您应该能够从中获得一些性能。但主要原因应该是stoes int的列应该是int。

group by 优化将属于“过早优化”的范畴...而加速 group by 子句的主要因素不是数据类型,而是字段上的索引

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-16
    • 2015-07-29
    • 2023-04-08
    • 2013-10-11
    • 2012-07-15
    • 2012-07-28
    • 2011-08-20
    • 2019-12-04
    相关资源
    最近更新 更多