在sql中插入查询和更新哪个更快?

2 人关注

在我的应用程序中,我有一个插入600行的要求,每行有10个参数,这意味着我每5秒要插入6000个数据,所以我正在删除以前的值,每5秒插入600行。

select * from mytable where ID=50000.

一段时间后,如果我需要ID90000的数据,那么sql server会从ID(ID=1)开始搜索每一个选择语句,还是会直接移动到ID=90000。 我的疑问是,sql server会不会从id=1开始搜索,直到与where子句相匹配,或者它如何搜索?

EDITID是主键,自动递增。

6 个评论
删除前一个值意味着:删除表中的所有数据?
当然, UPDATE ,会比 DELETE ,更便宜。 INSERT
@RaphaëlAlthaus 是的,我正在删除所有的数据,因为我不想要以前的数据,我需要每5秒的新鲜数据。
Mat
你为什么不把这两样东西都试一试,测一测?
@Mat 我所知道的唯一测量方法是捕捉执行前和执行后的时间,然后通过差异让我知道所花的时间,我这样做了,发现有一些毫秒的差异。
@AndreyGordeev 为了更新,我需要做一个where子句,这样就不会消耗更多的搜索时间。
sql
sql-server
sql-server-2008
SpringLearner
SpringLearner
发布于 2013-09-05
3 个回答
a_horse_with_no_name
a_horse_with_no_name
发布于 2013-09-05
已采纳
0 人赞同

我完全同意Aakash的回答,UPDATE很可能是更快的方法。

但是我想澄清一个潜在的误解(或缺乏理解),即关系型数据库是如何工作的。

如果我需要ID 90000的数据,那么sql server会在每个选择语句中从ID(ID=1)开始搜索,还是会直接移动到ID=90000

假设 ID 是你表中的主键(或者定义了唯一索引),那么SQL Server将直接查找ID=90000的行(实际上几乎所有的关系型数据库都会这样做)。

找到带有 id=1 的行与找到带有 ID=90000 ID=90000000 的行所需的时间相同。

我建议你花些时间阅读SQL Server手册,了解关系型数据库的工作原理。下面的主题可能会让你感兴趣。

  • http://msdn.microsoft.com/en-us/library/ms190659%28v=sql.100%29.aspx
  • http://msdn.microsoft.com/en-us/library/ms190623%28v=sql.100%29.aspx
  • http://msdn.microsoft.com/en-us/library/bb500155%28v=sql.100%29.aspx
  • 此外,你可能想看一下 "使用索引Luke" http://use-the-index-luke.com/

    那里有 很多 关于索引如何工作以及数据库如何使用它们的非常好的信息。

    谢谢你的回答,我需要一些链接来证明你的想法。这是因为在企业界,我不能对我的团队口头说这是更好的,我必须向他们展示证据。
    @javaBeginner:请看我添加的链接--特别是 "使用索引Luke"。但说实话:这绝对是关于关系型数据库和索引的基本知识。
    再次感谢你。那么你建议我在我的情况下插入什么会更好或更新(希望你在编辑后看到我的问题)。
    我同意Aakash的回答:鉴于你给我们的信息: UPDATE ,是个好办法。
    Vinay Pratap Singh Bhadauria
    Vinay Pratap Singh Bhadauria
    发布于 2013-09-05
    0 人赞同

    插入会更快,因为在更新的情况下,你需要首先搜索你要更新的记录,然后执行更新。

    这似乎不是一个有效的比较,因为你从来没有选择是插入还是更新,因为这两者满足了两种完全不同的需求。)

    在插入的情况下,OP也必须删除,所以你提到的搜索开销在两种情况下都会存在。
    @LievenKeersmaekers 在删除的情况下,我可以使用从表中删除,所以所有的数据将被删除,我不会使用where子句。
    那么插入也需要 "搜索":它需要确保没有违反唯一键或主键的情况。
    @a_horse_with_no_name 好吧,在表中我有一个coulmn ID,它是主键和自动增量。所以对于插入,我使用这种方式插入到表(x,y,z)的值(1,2,3)。
    Aakash Anuj
    Aakash Anuj
    发布于 2013-09-05
    0 人赞同