数据库的效率问题

haha_321 2013-12-30 10:44:11
我在用mysql数据库时想在一个有70几万的表中按id查找删除不到20万的数据有了一个小时,这也太慢了。id有索引。这是什么原因导致的呢?求大神给分析一下,新手不太懂sql的执行效率问题。
...全文
329 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
haha_321 2013-12-30
  • 打赏
  • 举报
回复
引用 27 楼 yupeigu 的回复:
[quote=引用 26 楼 haha_321 的回复:] [quote=引用 24 楼 yupeigu 的回复:] [quote=引用 22 楼 haha_321 的回复:] [quote=引用 21 楼 yupeigu 的回复:] 所以 ,对于mysql来说,可能提供了很多选择, 快有快的好处,也有坏处,不过对于你这个删除数据的需求来看,看似 myisam更加适合一点
直接锁表示什么意思???[/quote] 把整个表给锁住了,因为myisam好像没有行级锁,至于表级别的锁[/quote] 这个不太懂,去学习一下。[/quote] 看看这个,总结的不错: InnoDB与Myisam的六大区别 http://www.cnblogs.com/vicenteforever/articles/1613119.html[/quote] 不错
LongRui888 2013-12-30
  • 打赏
  • 举报
回复
引用 26 楼 haha_321 的回复:
[quote=引用 24 楼 yupeigu 的回复:] [quote=引用 22 楼 haha_321 的回复:] [quote=引用 21 楼 yupeigu 的回复:] 所以 ,对于mysql来说,可能提供了很多选择, 快有快的好处,也有坏处,不过对于你这个删除数据的需求来看,看似 myisam更加适合一点
直接锁表示什么意思???[/quote] 把整个表给锁住了,因为myisam好像没有行级锁,至于表级别的锁[/quote] 这个不太懂,去学习一下。[/quote] 看看这个,总结的不错: InnoDB与Myisam的六大区别 http://www.cnblogs.com/vicenteforever/articles/1613119.html
haha_321 2013-12-30
  • 打赏
  • 举报
回复
引用 24 楼 yupeigu 的回复:
[quote=引用 22 楼 haha_321 的回复:] [quote=引用 21 楼 yupeigu 的回复:] 所以 ,对于mysql来说,可能提供了很多选择, 快有快的好处,也有坏处,不过对于你这个删除数据的需求来看,看似 myisam更加适合一点
直接锁表示什么意思???[/quote] 把整个表给锁住了,因为myisam好像没有行级锁,至于表级别的锁[/quote] 这个不太懂,去学习一下。
發糞塗牆 2013-12-30
  • 打赏
  • 举报
回复
在大范围操作过程中,表锁往往更加高效
LongRui888 2013-12-30
  • 打赏
  • 举报
回复
引用 22 楼 haha_321 的回复:
[quote=引用 21 楼 yupeigu 的回复:] 所以 ,对于mysql来说,可能提供了很多选择, 快有快的好处,也有坏处,不过对于你这个删除数据的需求来看,看似 myisam更加适合一点
直接锁表示什么意思???[/quote] 把整个表给锁住了,因为myisam好像没有行级锁,至于表级别的锁
發糞塗牆 2013-12-30
  • 打赏
  • 举报
回复
sqlserver有行所、页锁、表锁、分区锁等等,根据不同的情况选择不同的粒度来锁住数据,锁表是直接独占这个表来操作,其他访问需要等待
haha_321 2013-12-30
  • 打赏
  • 举报
回复
引用 21 楼 yupeigu 的回复:
所以 ,对于mysql来说,可能提供了很多选择, 快有快的好处,也有坏处,不过对于你这个删除数据的需求来看,看似 myisam更加适合一点
直接锁表示什么意思???
LongRui888 2013-12-30
  • 打赏
  • 举报
回复
所以 ,对于mysql来说,可能提供了很多选择, 快有快的好处,也有坏处,不过对于你这个删除数据的需求来看,看似 myisam更加适合一点
LongRui888 2013-12-30
  • 打赏
  • 举报
回复
引用 17 楼 haha_321 的回复:
我将表换成MyISAM引擎后,在做删除只用了1分40秒。。。差距太大了。。。
呵呵,myisam引擎确实快,但是在删除数据时,会直接锁表的
haha_321 2013-12-30
  • 打赏
  • 举报
回复
引用 18 楼 DBA_Huangzj 的回复:
再唠叨一句,mysql不懂,所以给不了什么建议
依旧谢谢大神帮忙分析。。。
發糞塗牆 2013-12-30
  • 打赏
  • 举报
回复
再唠叨一句,mysql不懂,所以给不了什么建议
haha_321 2013-12-30
  • 打赏
  • 举报
回复
我将表换成MyISAM引擎后,在做删除只用了1分40秒。。。差距太大了。。。
haha_321 2013-12-30
  • 打赏
  • 举报
回复
引用 15 楼 DBA_Huangzj 的回复:
如果你没有时间研究文档,可以建一个除了表名一模一样的空表,但是存储引擎改成你觉得会快的那个,然后把数据导过去,再测试一下
引用 15 楼 DBA_Huangzj 的回复:
如果你没有时间研究文档,可以建一个除了表名一模一样的空表,但是存储引擎改成你觉得会快的那个,然后把数据导过去,再测试一下
好,我去测试一下看看。
發糞塗牆 2013-12-30
  • 打赏
  • 举报
回复
如果你没有时间研究文档,可以建一个除了表名一模一样的空表,但是存储引擎改成你觉得会快的那个,然后把数据导过去,再测试一下
haha_321 2013-12-30
  • 打赏
  • 举报
回复
引用 13 楼 yupeigu 的回复:
[quote=引用 12 楼 haha_321 的回复:] [quote=引用 11 楼 haha_321 的回复:] [quote=引用 9 楼 yupeigu 的回复:] [quote=引用 4 楼 haha_321 的回复:] [quote=引用 2 楼 yupeigu 的回复:] 70万条数据,删除不到20万条,应该是挺快的,应该是由于 其他回话在更新,或者在查询数据,导致了这个delete阻塞住了。
没有查询,直接删除。[/quote] 哦 我明白,我的意思是在你删除数据的时候,没有其他任何人在查询这个表的数据吗[/quote] 没有。。。我感觉跟我的默认引擎有很大的关系。[/quote] 你的意思是由于你用的是innodb,而不是myisam,导致删除数据这么慢是吧[/quote] 因该是吧,这个70w的表是我自己临时建的,肯定没有别人用,我在这个博客看的http://www.cnblogs.com/sopc-mc/archive/2011/11/01/2232212.html这个关于引擎的问题。
LongRui888 2013-12-30
  • 打赏
  • 举报
回复
引用 12 楼 haha_321 的回复:
[quote=引用 11 楼 haha_321 的回复:] [quote=引用 9 楼 yupeigu 的回复:] [quote=引用 4 楼 haha_321 的回复:] [quote=引用 2 楼 yupeigu 的回复:] 70万条数据,删除不到20万条,应该是挺快的,应该是由于 其他回话在更新,或者在查询数据,导致了这个delete阻塞住了。
没有查询,直接删除。[/quote] 哦 我明白,我的意思是在你删除数据的时候,没有其他任何人在查询这个表的数据吗[/quote] 没有。。。我感觉跟我的默认引擎有很大的关系。[/quote] 你的意思是由于你用的是innodb,而不是myisam,导致删除数据这么慢是吧
haha_321 2013-12-30
  • 打赏
  • 举报
回复
引用 11 楼 haha_321 的回复:
[quote=引用 9 楼 yupeigu 的回复:] [quote=引用 4 楼 haha_321 的回复:] [quote=引用 2 楼 yupeigu 的回复:] 70万条数据,删除不到20万条,应该是挺快的,应该是由于 其他回话在更新,或者在查询数据,导致了这个delete阻塞住了。
没有查询,直接删除。[/quote] 哦 我明白,我的意思是在你删除数据的时候,没有其他任何人在查询这个表的数据吗[/quote] 没有。。。我感觉跟我的默认引擎有很大的关系。
haha_321 2013-12-30
  • 打赏
  • 举报
回复
引用 9 楼 yupeigu 的回复:
[quote=引用 4 楼 haha_321 的回复:] [quote=引用 2 楼 yupeigu 的回复:] 70万条数据,删除不到20万条,应该是挺快的,应该是由于 其他回话在更新,或者在查询数据,导致了这个delete阻塞住了。
没有查询,直接删除。[/quote] 哦 我明白,我的意思是在你删除数据的时候,没有其他任何人在查询这个表的数据吗[/quote] 没有。。。
發糞塗牆 2013-12-30
  • 打赏
  • 举报
回复
从sqlserver方面来说,有可能是阻塞了,这个你可以单独找一个闲时测试一下,保证没有其他用户时候的时候删除,如果快,证明阻塞的可能性很大,如果还是一样,那就是删除的内置问题,但是mysql的internal的确不懂
LongRui888 2013-12-30
  • 打赏
  • 举报
回复
引用 4 楼 haha_321 的回复:
[quote=引用 2 楼 yupeigu 的回复:] 70万条数据,删除不到20万条,应该是挺快的,应该是由于 其他回话在更新,或者在查询数据,导致了这个delete阻塞住了。
没有查询,直接删除。[/quote] 哦 我明白,我的意思是在你删除数据的时候,没有其他任何人在查询这个表的数据吗
加载更多回复(10)

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧