mysql 自动生成crc32_mysql使用crc32字段建索引提高查询效率

之前也写过这样的一篇文章,再来一篇。

给字符串类型的字段建立索引效率不高,但是必须要经常查这个字段怎么建索引?比如这个字段名称是sys_trans_id字符串类型,那么可以建一个字段sys_trans_id_src32来存储crc32的值,并给这个字段建立索引。

crc32是整形,在MySQL中,给整形字段建立索引效率比较高,crc32虽然不能确保唯一性,但是无碍,相同的机率也是极小,关键是可以大大减少查询的范围,给sys_trans_id_src32这个字段建立索引,查询的时候带上crc32字段就可以利用到索引。

SQL如下,比如要查询sys_trans_id,同时带上sys_trans_id_src32走索引:

EXPLAIN SELECT

*

FROM

`js_checking_third_detail`

WHERE

(`biz_date` = '20160104')

AND (`diff_type` IN('2', '3'))

AND (

`sys_trans_id_src32` = '509417929'

)

AND (

`sys_trans_id` = '11451875264169885'

)

AND (`trans_type` = '1')

AND (`pay_type` = '1')

AND (`account_id` = '1')

ORDER BY

diff_type DESC,

biz_date DESC,

id DESC

LIMIT 0,

50

这样就通过crc32字段利用到了索引,看看索引的使用情况:

20160210224155890.png

假设不带上这个crc32的查询:

20160210224158131.png

效率上的差别还是挺大的,数据越多越明显。

使用PHP的crc32函数可能会出现负值的情况,修正方法如下:

/**

* @desc CRC32的修正方法,修正php x86模式下出现的负值情况

* @param $str

* @return string

*/

function jp_crc32($str){

return sprintf("%u",crc32($str));

}

存储数据的时候顺便也计算一下crc32的值存进去即可,查询的时候同样先算出要查询字段的crc32.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值