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