因為業務的需求,難免要對比較長的字段進行匹配,如果不建立索引就會進行全表掃描,非常消耗時間。
但是為長字符串建立索引也非常消耗空間,性能也不高。
一般有兩種解決方案
1.為字段添加前綴索引
2.增加crc字段
以下為兩種方案的實現,以身份證為例
CREATE TABLE `people` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`car_id` varchar(18) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
前綴索引
一般身份證前幾位都是有規律的,使用前幾位粒度太小了,可以先把身份證號反轉然后存入。
--注意1:前綴索引只能適用於普通索引中,不能使用在unique中
--注意2:前綴索引只支持英文和數字
--設置前綴索引
ALTER TABLE people ADD INDEX index_name(car_id(8))
或者使用Navicat設置索引
增加crc字段
添加個 crc 字段,存儲身份證號的時候 存入身份證號的 crc 信息(業務層計算)。
計算方式請自行百度吧,基本都有輪子