MySQL操作有速度差异吗?

时间:2009-02-19 04:39:05

标签: mysql

我正在讨论MySQL语句的速度,有人问我:在SELECT,INSERT,UPDATE和DELETE之间,哪个更快,为什么?

我不知道答案。有谁知道一个比另一个更快,如果是,为什么?或者它们通常都是相同的速度?

5 个答案:

答案 0 :(得分:1)

主要是“它取决于”。

例如,如果数据库为大量并发用户提供服务,那么表被锁定的时间长度将超过查询总共花费的时间。

根据经验,我会说:

INSERT通常最快,因为它只添加数据而不需要锁定表,因为没有修改现有数据。很多索引可能会减慢它的速度。

SELECT可能非常快或非常慢。这取决于查询。它有可能是最快的,它不会锁定表。但SELECT操作通常比其他操作复杂得多,从多个表中获取数据,或者更全面地排序或使用索引。

DELETE相对较慢。需要锁定表(或取决于存储引擎,受影响的行)。索引需要更新。

UPDATE通常是最慢的。需要锁定表(或取决于存储引擎,受影响的行),索引需要更新,并且它比DELETE稍微复杂一些。

但正如我所说,这完全是一个经验法则,它在很大程度上取决于环境。

答案 1 :(得分:0)

我不确定每个命令,但很多都取决于实际的声明。在表上使用索引需要在插入,更新和删除时修改索引。虽然索引可以使选择更快,但它会减慢任何数据修改语句的速度。除此之外,查询的复杂性,列的数据类型,任何sql函数(如聚合)都会改变查询的性能。

答案 2 :(得分:0)

你不是在问正确的问题。例如,SELECT必须以某种方式计算与选择匹配的所有行的集合,然后通过某种机制返回它们,这些机制可能来自像sqlite这样的大型动态数组(因为它在内存中)并且在相同的过程中)通过互联网远程传递数据。

因此,例如,SELECT * FROM USERDATA在本地返回10行可能需要几微秒,但如果它在WAN上返回10,000,000行,则需要几分钟。

答案 3 :(得分:0)

假设简单的查询和常见的使用场景和配置,SELECT将是最快的,因为它们最容易被缓存(通过一切 - CPU,磁盘,操作系统,MySQL内存和MySQL查询缓存)并且最常执行(允许所述缓存有用)。

所有其他操作都是写入,这些操作更耗时且无法缓存。即使是简单的写查询的操作时间通常也很大程度上取决于服务器的读取负载(SELECT查询)。

答案 4 :(得分:0)

数据库查询的速度只能以相对于每个其他的方式进行衡量。对于大多数简单的查询,它是以毫秒为单位的名义差异。

应该从“你有多少事情影响到什么?”的角度来看待更好的问题。

  • 查询可以采用多种形式,但如果您从3个表中进行选择,则可能比2个表慢。
  • 使用LIMIT将有助于查询在所有情况下更快地执行
  • 指数可以帮助查询是否正确使用
  • 更新索引需要时间
  • 较大的表需要更多时间才能完成

列表还在继续,但通常情况下我会建立并处理慢点。大多数人并没有真正推动他们的数据库:)