.net t将被发送到数据库,以防其格式使索引无效

.net t将被发送到数据库,以防其格式使索引无效,.net,sql-server,database,performance,.net,Sql Server,Database,Performance,不要进行查找,只需插入值即可。如果表被设计为拒绝重复记录,即它有主键或唯一索引,则插入将出错。只需捕获插入错误,如果收到,则像通常一样获取id 我同意查找不应该花费那么长的时间,但是为什么要让引擎解析查询,映射出路径,进行查找,然后在插入之前将结果发送给您,因为它可以同时执行这两项操作 您还可以研究: 如果有改进的空间,索引会更好 更改数据库的物理布局以改进IO 增加SQL Server的可用内存 不要进行查找,只需插入值即可。如果表被设计为拒绝重复记录,即它有主键或唯一索引,则插入将出错。只需

不要进行查找,只需插入值即可。如果表被设计为拒绝重复记录,即它有主键或唯一索引,则插入将出错。只需捕获插入错误,如果收到,则像通常一样获取id

我同意查找不应该花费那么长的时间,但是为什么要让引擎解析查询,映射出路径,进行查找,然后在插入之前将结果发送给您,因为它可以同时执行这两项操作

您还可以研究:

  • 如果有改进的空间,索引会更好
  • 更改数据库的物理布局以改进IO
  • 增加SQL Server的可用内存

  • 不要进行查找,只需插入值即可。如果表被设计为拒绝重复记录,即它有主键或唯一索引,则插入将出错。只需捕获插入错误,如果收到,则像通常一样获取id

    我同意查找不应该花费那么长的时间,但是为什么要让引擎解析查询,映射出路径,进行查找,然后在插入之前将结果发送给您,因为它可以同时执行这两项操作

    您还可以研究:

  • 如果有改进的空间,索引会更好
  • 更改数据库的物理布局以改进IO
  • 增加SQL Server的可用内存
  • “当我们向表中添加值时,每次都必须进行查找,以确定它是否需要插入值或只是获取id。”

    我们过去称之为“向上插入”操作

    try:
        UPDATE log SET blah blah blah WHERE key = key;
    except Missing Key:
        INSERT INTO log(...) VALUES(...);
    
    我们从未进行过自己的查询以查看键是否存在,因为这是UPDATE语句的工作。

    “当我们向表中添加值时,我们每次都必须进行查找,以查看它是否需要插入值或只是获取id。”

    我们过去称之为“向上插入”操作

    try:
        UPDATE log SET blah blah blah WHERE key = key;
    except Missing Key:
        INSERT INTO log(...) VALUES(...);
    

    我们从未进行过自己的查询以查看密钥是否存在,因为这是UPDATE语句的工作。

    首先,查看查询计划以了解它在做什么。这将告诉您它是否正在使用索引。单行测试/插入的1秒速度太慢。对于350k行,这足够长,可以对缓存的表进行表扫描

    第二。查看服务器的物理布局。您是否有日志和数据共享在同一磁盘上

    第三,检查unique键上的索引列与select查询上的谓词的顺序是否相同。顺序上的差异可能会混淆查询优化器

    第四,考虑唯一索引的聚集索引。如果这是查找行的主要模式,则会减少磁盘访问,因为表数据是用聚集索引物理存储的。有关聚集索引的简介,请参见。设置一个慷慨的填充系数表


    除非您有blob列,否则350k行远低于阈值,分区应该会有所不同。这个大小表应该完全适合缓存。

    首先,查看查询计划,看看它在做什么。这将告诉您它是否正在使用索引。单行测试/插入的1秒速度太慢。对于350k行,这足够长,可以对缓存的表进行表扫描

    第二。查看服务器的物理布局。您是否有日志和数据共享在同一磁盘上

    第三,检查unique键上的索引列与select查询上的谓词的顺序是否相同。顺序上的差异可能会混淆查询优化器

    第四,考虑唯一索引的聚集索引。如果这是查找行的主要模式,则会减少磁盘访问,因为表数据是用聚集索引物理存储的。有关聚集索引的简介,请参见。设置一个慷慨的填充系数表


    除非您有blob列,否则350k行远低于阈值,分区应该会有所不同。此大小表应完全适合缓存。

    您是否碰巧使用了光标?在这么小的桌子上做你说的事情不应该需要十秒钟


    您需要基于集合的update和insert语句。

    您是否碰巧使用了光标?在这么小的桌子上做你说的事情不应该需要十秒钟

    您需要基于集合的update和insert语句

  • 排除连接和驱动程序问题-确保以相同方式在同一数据库上执行的其他操作足够快

  • 确保您独立于可能在同一事务中运行的其他操作来度量此操作

  • 确保您没有锁定场景-停止所有其他操作,只需从管理工具执行查找和更新序列

  • 检查查找的成本是否更高(99%),或者磁盘写入的成本是否更高—尽管10秒对于速度较慢的磁盘来说也太高了。这样做是为了完整性

  • 检查您的索引是否正在被查询表使用-可能正在进行扫描

  • 如果用于索引的列是文本字段,请通过对具有索引的非文本列进行查找来检查文本索引是否位于问题的根源。如果是这样,请尝试更改逻辑以使用PK或使用哈希而不是文本

  • 排除连接和驱动程序问题-确保以相同方式在同一数据库上执行的其他操作足够快

  • 确保您独立于可能在同一事务中运行的其他操作来度量此操作

  • 确保您没有锁定场景-停止所有其他操作,只需从管理工具执行查找和更新序列

  • 检查查找的成本是否更高(99%),或者磁盘的成本是否更高