Mysql索引优化之字符串索引string-to-int

Mysql索引优化之字符串索引string-to-int

前面提到通过设置字符串前缀索引来优化字符串索引的方式,这里讲一个通过将字符串转换成int的方式做一个替代
索引,这也是一种不错的方式,显然int的排序及检索更高效。

在数据表中维护一个name_crc32的字段,即
CREATE TABLE `test` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `name_crc32` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `name_crc32` (`name_crc32`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


php的 crc32($str) 函数,可以理解为 md5 的整型版,返回值(32位机)可能有负数,因此要取整,但是这个函数在
32位机和64位机上输出结果是不一样的,值得注意!!!!
并且,crc32计算的值有不小的概率会冲突,即不同的str计算出同样的值了。

当Insert或update表的name字段时需要同步计算name_crc32的值并写入。当然也可以写mysql的触发器来完成这个任
务,但是建议mysql只用来存储,不做任何运算。

然后就是查询了:
$name = 'asssdddddddddd';
$crc32 = crc32($name);
select * from test where name_crc32 = $crc32 and name = $name;

带上name条件是因为crc32可能会相同,但是由name_crc32构建的int索引效率就比字符串搞很多,然后可能会得到
一个范围,mysql再遍历这个范围使用name条件很快找到目标。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值