您好,欢迎来到锐游网。
搜索
您的当前位置:首页Mysql索引优化之字符串索引string-to-int

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位机和位机上输出结果是不一样的,值得注意!!!!
并且,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条件很快找到目标。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- ryyc.cn 版权所有 湘ICP备2023022495号-3

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务