拉风~zhang 说:
timothy....你的删除语句可以贴出来看看吗?
timothy 说:
delete from websitekw0003 where wid=111;
就这么个语句
wid还是个索引呢。
这个表有三十万条数据
那么个语句执行 200妙。。
wei 说:
。。。。
拉风~zhang 说:
你把这表websitekw0003的外键去了,然后发现快乐
是吗
timothy 说:
我在执行之前 先运行一下 SET FOREIGN_KEY_CHECKS=0;
然后0秒就删除了。
wei 说:
有外键啊
Saver 说:
这个没道理啊
timothy 说:
看来跟外键 有莫大的关系。。
Saver 说:
难道有外键会做全表扫
wei 说:
啥没道理
Saver 说:
?
拉风~zhang 说:
你让表不做外键的检查
timothy 说:
是阿。
Saver 说:
这个又不是级联删除级联更新
和外键有啥关系么
拉风~zhang 说:
wid=111的记录有多少条呢,timothy
timothy 说:
我也觉得奇怪阿。
Saver 说:
顶多是要整理索引
timothy 说:
一万来条。
可是我去掉外键约束 速度确实飞快。。
Saver 说:
这个需要牛人来解释下了
timothy 说:
我在去掉外键之前尝试很多次 都无法删除成功。
拉风~zhang 说:
saver,外键约束和trigger原理类似吗?
Saver 说:
没研究过
如果你不需要级联更新级联删除的操作,建议不使用外键
刚去看了HP MYSQL
timothy 说:
Saver 说:
外键的使用会造成子表插入的时候,父表加锁
timothy 说:
这个。。更严重。。
晕
wei 说:
还是不要用外键吧
Saver 说:
还好是行锁
以确保,主外键的约束
timothy
你做个实验
带外键删除的时候去show innodb status
看看有没有锁,都锁了啥
试试能explain这个delete么?
我刚看了innodb的手册,上面并没有提到删除子表数据的时候需要检测fk
wei 说:
innodb的手册? 发我
saver 发我啊
说:
删除子表数据,本来就不需要检查fk的吧
删除父表才需要
timothy 说:
可是我删除的时候速度就是超级慢。。
说:
那就不清楚了。原理上说应该是不需要的。
从来没用过外键
拉风~zhang 说:
常理应该的检查
逻辑上
timothy 说:
我在去掉外键约束前 根本无法删除成功。
拉风~zhang 说:
比如:父亲 和 儿子 , 你打人家孩子前要看他爸是谁,如果他爸不在了,那么他孩子怎么办谁来照顾
可能不恰当
timothy 说:
比较恰当。
说明删除的时候还是要检查的。
拉风~zhang 说:
既然建立了关系,那么就要严格的维持
Saver 说:
wei,网上搜
拉风~zhang 说:
timothy...删除的快面其实,是有我们的条件决定,mysql会选择delete_row() 还是delete_all_row()帮我们去操作,
Saver 说:
拉风~zhang 说:
比如:父亲 和 儿子 , 你打人家孩子前要看他爸是谁,如果他爸不在了,那么他孩子怎么办谁来照顾
可能不恰当
这个比喻应该是不恰当了
拉风~zhang 说:
不恰当
Saver 说:
从原理和需求上来说,外键设计就不是这样的
你用部门和部门员工的关系来说是恰当的
拉风~zhang 说:
我对FK,理解感觉就是trigger
Saver 说:
你试过级联删除么
性能低的让你头痛
一个部门可以么有员工,但员工不可以没有部门
阅读(1009) | 评论(0) | 转发(0) |