mysql索引视图触发器

来源:互联网 发布:网络的利与弊作文800字 编辑:程序博客网 时间:2024/06/05 09:57

这段时间开会讨论数据访问时间优化的瓶颈和方案,邮件访问操作还是有点慢尽可能再优化,我们组新来的大牛测试和mysql之间的数据交互时间长可以继续优化,猜测当初的mysql设计貌似只考虑了前端开发方便而忽略了后台的性能,这里提到了些mysql的 索引设计、视图、触发器 听得我值犯迷糊 今天把这些东西补一补 以后就可以听懂了:

索引的设计和应用:

为test表创建一个4字节的前缀索引:create index  indexname on test (name(4));

测试查询:
explain select * from test where username="lyy"  \G;

删除索引:
drop index indexname on test;

索引建立是在select后面的where条件列,且重复值越小(基数越大)索引效果越好,最好是建立短索引(前缀/后缀n个字节),不要建立过多索引会影响:索引结构更新 mysql优化 读写 磁盘占用。

hash索引:只适用于=或者>= 、<=操作符的比较

btree索引:<、>、<=、>=、<>、!=、 between 或者like 'pattern'(正则匹配)

索引查询:

适合btree和hash

select * from test where mid=1 or mid in (10,18,25);

只适合btree

select * from test where mid>1 and mid<10;

select * from test where mid like 'ab%' or mid between 'lisa' and 'simon'; 

视图:

过滤好的复合条件的结果集。

创建:(聚合、常量、子函数试图是不能更新的)

> create or replace view view_name as

>select test.name, test.password, test1.sal from test,test1 where test.name=test1.name;

with()check option限定条件:

(1)双层视图
> create or replace view ivew_name as

> select name,passwd from test where id < 10 with check option;

(2)

> create or replace view view_name1 as

> select name,passwd from view_name where id < 5 with local check option;

(3)

> create or repalce view view_name2 as

> select name,passwd from view_name where id < 5 with caseaded check option;

update view_name1 set id = 10 where id=3;  //成功 with local check option只要满足本视图条件即可

update view_name2 set id=10 where id =3;  //失败 with caseaded check option 要满足所有相关视图才行

删除:

drop view view_name;

查看视图详细信息:

show table status like 'view_name'  \G;

show create view view_name \G;

触发器:

创建触发器:

create trigger trigger_name trigger_time trigger_event on tbl_name for each row trigger_stml:

trigger_time:after和befor

trigger_event:触发事件 insert  update  delete

delimiter $$

create trigger trigger_name after insert on test for each row begin insert into trig_test (name,passwd, sal)  values(new.name, new.passwd, 1new.sal);

end ;

$$

delimiter;

数据插入test时候也会像trig_test插入一条;

对于触发器来说:如果源数据是insert  触发器表中如果有该数据则执行更新update操作,如果没有直接插入;  如果设定了after insert、before insert、after update、befor update  则:如果数据源insert  触发器表中如果有该数据则执行更新update操作(before insert  --> before update --> after update 这样一个过程),如果没有直接插入(befor insert-->after insert)  设置触发器时候应注意  他是按照 before触发器-->行操作-->after触发器顺序执行的

删除:

drop  trigger trigger_name;

查看状态:

show triggers \G

desc triggers;

select * from triggers where trigger_name='triggername' \G;

 

原创粉丝点击