【mysql怎么使用】mysql使用crc32字段建索引提高查询效率

更新时间:2020-05-08    来源:mysql教程    手机版     字体:

【www.bbyears.com--mysql教程】

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

给字符串类型的字段建立索引效率不高,但是必须要经常查这个字段怎么建索引?比如这个字段名称是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字段利用到了索引,看看索引的使用情况:

crc32索引

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

crc32092506

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

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


/**
 * @desc CRC32的修正方法,修正php x86模式下出现的负值情况
 * @param $str
 * @return string
 */
function jp_crc32($str){
    return sprintf("%u",crc32($str));
}
存储数据的时候顺便也计算一下crc32的值存进去即可,查询的时候同样先算出要查询字段的crc32.

本文来源:http://www.bbyears.com/shujuku/93450.html

热门标签

更多>>

本类排行