url查询哈希值的维护 触发器

2.1 创建表 pseudohash。

2.2 创建触发器,当对表进行插入和更新时,触发 触发器

delimiter |
create trigger pseudohash_crc_ins before insert on pseudohash for each row
begin set @x = "hello trigger";
set NEW.url_crc=crc32(NEW.url);
end;
|
create trigger pseudohash_crc_upd before update on pseudohash for each row
begin set @x = "hello trigger";
set NEW.url_crc=crc32(NEW.url);
end;
| delimiter ;

  2.3 插入操作

insert into pseudohash(url) values("http://www.baidu.com");

insert into pseudohash(url) values("http://www.163.com");

2.4 查看表中数据(是进行更新操作之后的数据)

2.5 更新

update pseudohash set url = 'www.163.com' where id = 1;

可以看到的是,插入和更新操作后,他们的 url_crc是不同的

----------------------------------------------------------------------------

2.6  上面源于一个 对于url建立索引的例子,还有一种建立索引的方式: 在B+ 树上建立一个伪索引,和真正的索引不同,它还是在B+树 索引上进行查找,但是,使用的是 键的哈希值进行查找,而不是键本身,这样会加快查找

2.6.1 创建urls 表,注意使用的是 memory存储引擎

CREATE TABLE `urls` (
`url` varchar(255) DEFAULT NULL,
`url_crc` int(11) DEFAULT '0',
KEY `url` (`url`) USING HASH
) ENGINE=MEMORY DEFAULT CHARSET=utf8;

     2.6.2 然后插入url和url_crc,例如

insert into urls values('www.gougou.com',crc32('www.gougou.com'));

像上面的那样,或者使用触发器

2.6.3 然后查询的时候使用 hash索引查询

select * from urls where url = "www.baidu.com" and url_crc = crc32("www.baidu.com");

select * from urls where url_crc = crc32("www.baidu.com");

select * from urls where url = "www.baidu.com"

上面3个查询结果当然是一样的,但是速度上hash的快很多

3. 触发器 语法

3.1  CREATE TRIGGER trigger_name trigger_time trigger_event

              ON tbl_name FOR EACH ROW trigger_stmt

trigger_time是触发程序的动作时间。它可以是BEFORE或AFTERtrigger_event指明了激活触发程序的语句的类型。trigger_event可以是下述值之一:

·             INSERT:将新行插入表时激活触发程序,例如,通过INSERT、LOAD DATA和REPLACE语句。
· UPDATE:更改某一行时激活触发程序,例如,通过UPDATE语句。
· DELETE:从表中删除某一行时激活触发程序,例如,通过DELETE和REPLACE语句。
      3.2 可能遇到的问题

如果你在触发器里面对刚刚插入的数据进行了 insert/update, 会造成循环的调用.

如:

create trigger test before update on test for each row update test set NEW.updateTime = NOW() where id=NEW.ID; END

应该使用set:

create trigger test before update on test for each row set NEW.updateTime = NOW(); END

3.3 触发器 与存储过程

触发程序不能调用将数据返回客户端的存储程序,也不能使用采用CALL语句的动态SQL

       (允许存储程序通过参数将数据返回触发程序)。 

而存储过程  可以接受参数,将结果范围给应用程序

mysql触发器与hash索引的更多相关文章

  1. 【Mysql】mysql使用触发器创建hash索引

    概述 若设计的数据表中,包含较长的字段,比如URL(通常都会比较长),查询时需要根据该字段进行过滤: select * from table_xxx where url = 'xxxxxxx'; 为了 ...

  2. mysql btree与hash索引的适用场景和限制

    btree索引: 如果没有特别指明类型,多半说的就是btree索引,它使用btree数据结构来存储数据,大多数mysql引擎都支持这种索引,archive引擎是一个例外,5.1之前这个引擎不支持任何索 ...

  3. mysql InnoDB引擎是否支持hash索引

    看一下mysql官方文档:https://dev.mysql.com/doc/refman/5.7/en/create-index.html , 从上面的图中可以得知,mysql 是支持hash索引的 ...

  4. mysql 存储引擎对索引的支持

    一.首先给出mysql官方文档给出的不同存储引擎对索引的支持 从上面的图中可以得知,mysql 是支持hash索引的,但支持和不支持又和具体的存储引擎有关系.从图中看到InnoDB是支持Btree索引 ...

  5. MySQL的btree索引和hash索引的区别

    Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-T ...

  6. MySQL索引类型 btree索引和hash索引的区别

    来源一 Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 ...

  7. Mysql 自定义HASH索引带来的巨大性能提升----[真相篇]

    推倒重来 俗话说no zuo no die why you try,这时候我又忍不住zuo了,吭哧吭哧的把解决过程发上博客,向全世界宣布,哥又搞定个难题. 剧情的发展往往是看起来主角完全掌握了局势的情 ...

  8. Mysql 自定义HASH索引带来的巨大性能提升----[挖坑篇]

    有这样一个业务场景,需要在2个表里比较存在于A表,不存在于B表的数据.表结构如下: T_SETTINGS_BACKUP | CREATE TABLE `T_SETTINGS_BACKUP` ( `FI ...

  9. mysql索引hash索引和b-tree索引的区别

    Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-T ...

随机推荐

  1. Django——缓存机制

    1.缓存介绍 (1)概论 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次的的后台 ...

  2. Python基础(16)_面向对象程序设计(类、继承、派生、组合、接口)

    一.面向过程程序设计与面向对象程序设计 面向过程的程序设计:核心是过程,过程就解决问题的步骤,基于该思想设计程序就像是在设计一条流水线,是一种机械式的思维方式 优点:复杂的问题的简单化,流程化 缺点: ...

  3. Docker部署JavaWeb项目实战

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了如何在Ubuntu14.04 64位系统下来创建一个运行Javaweb应用程 ...

  4. 【HackerRank】Utopian tree

    The Utopian tree goes through 2 cycles of growth every year. The first growth cycle of the tree occu ...

  5. CSS3展开带弹性动画的手风琴菜单

    在线演示 本地下载

  6. 2018.7.12训练赛 -K

    水题 判断素数 因为范围是到16位,所以可以用long long存储 然后判断是否为素数就ok了. 但我提交之后显示10个测试样例通过了9个.......原因是下面标红的部分. 埃氏筛法:若a是合数, ...

  7. Go reflect反射

    Go语言中的反射非常强大,可以对string, int, struct, func...进行反射,使用起来也比较简单. 示例1:反射函数 package main import ( "fmt ...

  8. hibernate集合的加载策略

    在集合方配置lazy和fetch的方式,默认的是lazy为true,fetch为select,lazy有true,extra和false,true和extra都是懒加载,只是extra比true更懒, ...

  9. Struts的url-pattern配置问题

    一,servlet容器对url的匹配过程: 当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://loca ...

  10. XXL-Job分布式任务调度

    分布式情况下定时任务会出现哪些问题? 分布式集群的情况下,怎么保证定时任务不被重复执行 分布式定时任务解决方案 ①使用zookeeper实现分布式锁 缺点(需要创建临时节点.和事件通知不易于扩展) ② ...