mysql数据库最大性能,mysql – 最大化数字的数据库性能

我有数字化图像哈希,哈希就像2k整数长.

什么是将其存储在数据库和搜索中的最佳解决方案?

行数至少为300万.对性能的建议?

我正在考虑创建utf8_bin校对列并将所有数字转换为区分大小写的哈希并在列上添加索引,还是有其他更好的解决方案?

附: hash可以修改,1k整数会不太准确,所以我更喜欢存储2k左右.

解决方法:

存储长度最紧凑的方法是使用VARBINARY数据类型存储为二进制字节,而不是使用utf8_bin校对存储的字符串.计算图像的数字哈希值,转换为十六进制数字字符串,然后使用UNHEX()转换为二进制字节.二进制字节存储在等效的十六进制数字字符串的一半空间中.例如,像’FFFF’这样的字符串需要四个字符,但UNHEX(‘FFFF’)存储在两个二进制字节中.

单独存储更紧凑只是对性能的适度改进.

更好的性能优势是使用索引.但InnoDB对索引长度有限制.默认情况下,限制为767字节.

如果设置innodb_large_prefix = 1,则可以将InnoDB增加到3072字节(必须使用DYNAMIC或COMPRESSED行格式,这意味着必须使用每表文件).这应该足以索引哈希的全长.

更新:我在MySQL 5.7.7和MariaDB 10.2中了解到innodb_large_prefix是deprecated,该选项将在以后的版本中删除.但不要担心,它已被弃用,因为大索引支持将成为默认行为.不再需要该选项,因为它实际上始终为ON.

CREATE TABLE MyTable (

dhash VARBINARY(3072) NOT NULL,

UNIQUE KEY (dhash)

);

标签:mysql,indexing,hash,performance

来源: https://codeday.me/bug/20190701/1349386.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值