mySql 哈希索引的创建
2016-02-26 17:28
465 查看
① 索引适合创建于出现重复数据少的列名上,列的值冲突越多,代价越大。
② SELECT ID FROM 表名 WHERE URL ="http://www.mysql.com";
如果要添加索引的列值很长,可以在表中添加列,并用SRC32做哈希,将很长的字符串转化成数字。
例:UPDATE 表名 SET 表名.url_src = SRC32(表名.url);
表中数据是这样的:
这样,查询就可以进行优化了:
SELECT ID FROM 表名WHERE URL="http://www.mysql.com" AND url_src=SRC32("http://www.mysql.com");
查询的时候条件中必须带着哈希值和对应的列值。
原因:当数据量很大时哈希函数SRC32()会出现大量的哈希冲突。
另外,除了使用SRC32()做哈希函数外,还可以用FNV64()作为哈希函数,哈希值64位,速度快,且冲突比SRC32()少很多。
※采用上述这种方式,不要用SHA1()和MD5()作为哈希函数。
原因:计算出来的哈希值字符串很长,浪费大量空间,比较是也很慢。
② SELECT ID FROM 表名 WHERE URL ="http://www.mysql.com";
如果要添加索引的列值很长,可以在表中添加列,并用SRC32做哈希,将很长的字符串转化成数字。
例:UPDATE 表名 SET 表名.url_src = SRC32(表名.url);
表中数据是这样的:
URL | url_src |
http://www.mysql.com | 1560514994 |
SELECT ID FROM 表名WHERE URL="http://www.mysql.com" AND url_src=SRC32("http://www.mysql.com");
查询的时候条件中必须带着哈希值和对应的列值。
原因:当数据量很大时哈希函数SRC32()会出现大量的哈希冲突。
另外,除了使用SRC32()做哈希函数外,还可以用FNV64()作为哈希函数,哈希值64位,速度快,且冲突比SRC32()少很多。
※采用上述这种方式,不要用SHA1()和MD5()作为哈希函数。
原因:计算出来的哈希值字符串很长,浪费大量空间,比较是也很慢。
相关文章推荐
- 关于mysql修改属性
- Sql Server 实现 Mysql Limit 功能
- 无法远程访问Mysql
- mysql count(*) 问题
- mysql数据库常用的时间函数
- MySQL查看SQL语句执行效率
- MySQL查看SQL语句执行效率
- MySQL知识(十三)——索引
- Mysql数据库大表归档操作
- mysql安装的问题及解决
- mysql系列3-mysql主从同步
- 如何对MySQL中的大表进行数据归档
- mysql导出表数据到文件的几种方法
- Mysql实现数据的不重复写入(insert if not exists)以及新问题:ID自增不连续的解答
- MySql查询某字段中是否含中文
- mysql系列2-mysqldump逻辑备份
- mysql系列1-基本sql优化
- mysql 开启log-bin 无效
- mysql查询今天,昨天,近7天,近30天,本月,上一月数据的方法 时间格式为 int DATETIME
- MySQL:MySQL日期数据类型、MySQL时间类型