之前也写过这样的一篇文章,再来一篇。
给字符串类型的字段建立索引效率不高,但是必须要经常查这个字段怎么建索引?比如这个字段名称是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')