美文网首页我爱编程mysql
mysql长字符串如何建立索引

mysql长字符串如何建立索引

作者: 良人与我 | 来源:发表于2018-12-24 14:47 被阅读40次

因为业务的需求,难免要对比较长的字段进行匹配查找。
如果不建立索引就会全表扫描相当耗时。如果为长字符串建立索引浪费空间,性能也比较低。
那该怎么办呢。这里给出几个方案供参考。
以身份证字段为例,一般是18位的字符串。
persion 表如下

CREATE TABLE `persion` (
  `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;

方案一

建立前缀索引,来减少索引的长度

CREATE TABLE `persion` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `car_id` varchar(18) NOT NULL,
  `crc` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `persion_car_id_idx` (`car_id`(8)) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

但是身份证一般前面几位是有规律的,代表省市区。所以如果以前面几位做索引可能会导致粒度太小了。
可以将身份证反转 然后存入。

方案二

添加个 crc 字段,存储身份证号的时候 存入身份证号的 crc 信息(业务层计算)。

CREATE TABLE `persion` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `car_id` varchar(18) NOT NULL,
  `crc` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

而查询时候 先查询 crc 匹配后再查询身份证。

SELECT id, name, car_id
FROM persion p
where p.crc = ?
and p.car_id =  ? ;

相关文章

  • mysql长字符串如何建立索引

    因为业务的需求,难免要对比较长的字段进行匹配查找。如果不建立索引就会全表扫描相当耗时。如果为长字符串建立索引浪费空...

  • mysql索引

    本文从如何建立mysql索引以及介绍mysql的索引类型,再讲mysql索引的利与弊,以及建立索引时需要注意的地方...

  • mysql索引及查询

    本文从如何建立mysql索引以及介绍mysql的索引类型,再讲mysql索引的利与弊,以及建立索引时需要注意的地方...

  • mysql索引

    索引 mysql索引的建立对于mysql的高效运行是很重要的,索引可以大大提高mysql的检索速度。索引分单列索引...

  • MySQL的索引原理与查询优化

    一、MySQL 索引简介 1、 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL...

  • MySQL部门培训-索引篇

    章节目录 MySQL索引学习路径 MySQL索引介绍 索引分类 索引建立技巧 小试牛刀-索引使用预判 explai...

  • 9.MySQL索引

    索引 索引MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。因此,数据...

  • mysql索引总结----mysql 索引类型以及创建(转载)

    一、索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度 二、索引的...

  • 浅谈mysql数据库索引

    索引类型 索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。mysql索引大致可...

  • 索引的作用,优缺点

    mysql : 使用B+树建立索引。 索引的优缺点:

网友评论

    本文标题:mysql长字符串如何建立索引

    本文链接:https://www.haomeiwen.com/subject/shpnhqtx.html