mysql 创建伪hash索引

1创建自定义伪hash索引

原理:在BTree数上面创建一个伪hash索引,这和真正的hash索引不是一样的,因为还是使用的b-tree进行查找,但是它使用hash值而不是建本身进行查找

1.1正常情况查询

select id from url where url ="http://www.ayugudu.top";

1.2伪hash索引查询

select id from url where url ="http://www.ayugudu.top" 
 and url_crc=CRC("http://www.ayugudu.top");

这样性能会提高很多,因为mysql优化器会使用体积小的url_crc进行列的索引完成查找。这样做的方式时需要维护哈希表。但我们可以使用触发器进行实现。

1.3 建表语句

CREATE TABLE preudohash (
	id INT NOT NULL auto_increment,
	url VARCHAR ( 255 ) NOT NULL,
	url_crc INT UNSIGNED NOT NULL DEFAULT 0,
PRIMARY key ( id ) 
);

1.4 插入前触发器

delimiter //
CREATE TRIGGER preudohash_crc_ins BEFORE INSERT ON preudohash FOR EACH ROW

SET NEW.url_crc = CRC32( NEW.url );

1.5 更新前触发器

delimiter //
CREATE TRIGGER preudohash_crc_upd BEFORE UPDATE ON preudohash FOR EACH ROW
BEGIN SET NEW.url_crc=crc32(NEW.url);
END;

1.6 进行验证

注意:不要采用sha1以及MD5作为哈希函数,因为这个计算的hash值非常长,可以使用md5()返回值的一部分作为自定义的hash函数

delimiter //
create function HASH64(url varchar(255))
returns int
return CONV(RIGHT(MD5(url),16),16,10);

1.7 处理hash冲突

要处理hash冲突必须在where 条件带入hash值和对应列值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值