前缀索引

前缀索引当索引是很长的字符序列时,这个索引将会很占内存,而且会很慢,这时候就会用到前缀索引了。所谓的前缀索引就是去索引的前面几个字母作为索引,但是要降低索引的重复率,索引我们还必须要判断前缀索引的重复率。先看这样一张表:mysql>select*fromtest;+———-+——-+|name|score|+——–…

大家好,又见面了,我是你们的朋友全栈君。

             当索引是很长的字符序列时,这个索引将会很占内存,而且会很慢,这时候就会用到前缀索引了。所谓的前缀索引就是去索引的前面几个字母作为索引,但是要降低索引的重复率,索引我们还必须要判断前缀索引的重复率。先看这样一张表:

mysql> select * from test;
+----------+-------+
| name     | score |
+----------+-------+
| zhangsan | 123   |
| wangwu   | 345   |
| zhaoliu  | 234   |
| lisisi   | 687   |
+----------+-------+
4 rows in set (0.08 sec)

如果以name作为索引,当name对应的字符串很长时,就要考虑索引的占用空间和效率问题。这时候就需要引入前缀索引,在使用前缀索引时,首先要去比较重复率。

mysql> select 1.0*count(distinct name)/count(*) from test;
+-----------------------------------+
| 1.0*count(distinct name)/count(*) |
+-----------------------------------+
|                           1.00000 |
+-----------------------------------+
1 row in set (0.00 sec)

mysql> select 1.0*count(distinct left(name,2))/count(*) from test;
+-------------------------------------------+
| 1.0*count(distinct left(name,2))/count(*) |
+-------------------------------------------+
|                                   0.75000 |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql> select 1.0*count(distinct left(name,1))/count(*) from test;
+-------------------------------------------+
| 1.0*count(distinct left(name,1))/count(*) |
+-------------------------------------------+
|                                   0.75000 |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql> select 1.0*count(distinct left(name,3))/count(*) from test;
+-------------------------------------------+
| 1.0*count(distinct left(name,3))/count(*) |
+-------------------------------------------+
|                                   0.75000 |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql> select 1.0*count(distinct left(name,4))/count(*) from test;
+-------------------------------------------+
| 1.0*count(distinct left(name,4))/count(*) |
+-------------------------------------------+
|                                   1.00000 |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql> select 1.0*count(distinct left(name,2))/count(*) from test;
+-------------------------------------------+
| 1.0*count(distinct left(name,2))/count(*) |
+-------------------------------------------+
|                                   0.75000 |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql> select 1.0*count(distinct left(name,5))/count(*) from test;
+-------------------------------------------+
| 1.0*count(distinct left(name,5))/count(*) |
+-------------------------------------------+
|                                   1.00000 |
+-------------------------------------------+
1 row in set (0.00 sec)

其中left函数为字符串截取函数。

select 1.0*count(distinct name)/count(*) from test这是比较整个name的重复率,当时这是最好的情况。然后分别截取name字符的前几个字母,最后选取的计算值要接近整个取整个name时得出的计算值,然后再选中占用空间小的。由上面执行的结果可知应选中name的前4个字母作为索引最为适合。

创建索引:

mysql> alter table test add key(name(4));
Query OK, 4 rows affected (0.15 sec)
Records: 4  Duplicates: 0  Warnings: 0

随后就可以正常按name字符进行查找了。

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142153.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月24日 下午12:40
下一篇 2022年5月24日 下午12:40


相关推荐

  • 在线Excel:SpreadJS 15.0 中文版

    在线Excel:SpreadJS 15.0 中文版在线 Excel SpreadJS 概述 SpreadJS 是用于企业 JavaScript 开发的最全面的电子表格解决方案 它结合了网格功能和电子表格功能 提供完整的类似 Excel 的体验 包括表格 图表 形状 迷你图 高速计算引擎 条件格式 排序和过滤 以及广泛支持导入和导出本机 Excel 电子表格 无需 Excel 依赖项 还提供了一些独家功能 如条形码 富文本 单元格按钮 单元格下拉列表和范围模板 以帮助开发人员创建完美的 JavaScript 应用程序 使用 SpreadJS 小部

    2026年3月17日
    2
  • csv文件打开是乱码,怎么办?管用的方法,一个就够

    csv文件打开是乱码,怎么办?管用的方法,一个就够工作中 将 python 生成的中间结果文件写入 CSV 经常这么干是不是 文件保存下来后用 excel 打开 出现了乱码情况 真心烦 为什么 CSV 是用 UTF 8 编码的 而 EXCEL 是 ANSI 编码 由于编码方式不一致导致出现乱码 明白了原因之后 我们只需要把 CSV 文件的编码方式修改成与 Excel 相同的编码方式就可以了 那怎么修改 先将 CSV 用 txt 记事本打开 然后选择 ANSI 编码方式 另存为 点编码这里 这

    2026年3月19日
    2
  • h3c交换机端口加入vlan命令_h3c交换机vlan配置划分命令

    h3c交换机端口加入vlan命令_h3c交换机vlan配置划分命令h3c交换机vlan配置划分命令一、基本设置1.console线连接成功2.进入系统模式system-view//提示符由变为[H3C]3.更改设备名称[H3C]sysnameTEST4.查看所有配置信息[H3C]displaycurrent-configuration//displaythis为查看当前路径下的设备信息5.创建并进入VLAN10[H3C]vlan10…

    2022年6月20日
    75
  • hadoop集群搭建(超详细版)「建议收藏」

    hadoop集群搭建(超详细版)「建议收藏」1.准备好需要安装的软件虚拟机VMware12.pro操作系统CentOS6.5远程控制虚拟机的终端SecureCRT8.12.在虚拟机中安装CentOS操作系统安装好虚拟机,图形界面如下图创建新的虚拟机,选择自定义(高级),点击下一步虚拟机硬件兼容性默认,浏览需要安装的CentOS6.5镜像文件自定义用户名和密码(用于登录)设置虚…

    2022年10月15日
    5
  • 什么是差分放大电路

    什么是差分放大电路差分放大电路利用电路参数的对称性和负反馈作用 有效地稳定静态工作点 以放大差模信号抑制共模信号为显著特征 广泛应用于直接耦合电路和测量电路的输入级 但是差分放大电路结构复杂 分析繁琐 特别是其对差模输入和共模输入信号有不同的分析方法 难以理解 因而一直是模拟电子技术中的难点 差分放大电路 按输入输出方式分 有双端输入双端输出 双端输入单端输出 单端输入双端输出和单端输入单端输出四种类型 按共模负反馈的形式分 有典型电路和射极带恒流源的电路两种 a 射极偏置差放 b 电流源偏置差放

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号