sql 查询中的效率检查
Efficiency check in sql query
我在两种执行任务的方式之间挣扎。
我有一组条件,当它们都为真时 - 我需要在该记录的 "x" 列属性中设置 "true"。
什么更有效和推荐,为什么?
- 为table中的所有记录将此列设置为"false",然后
运行 在某些条件下设置 "true" 的另一个查询。
- 如果所有条件都满足 "true",则设置 "true",然后 运行 另一个查询以在一个或多个条件失败的所有记录上设置 "false"。
我不能假设 "x" 列的某些默认值需要更改,因为查询应该 运行 也偶尔,当需要时,在初始值是插入到该列,并且某些条件可能与我上次 运行 此查询时有所不同。
或许还有另一种思路,比上面两种更高效?
我也想了解如何高效地计算查询,类似于编程中的高效计算方式。
可能最有效的方法是使用 case 语句,因为您只需每行评估一次条件,并且每行只需修改一次,例如
UPDATE tablename SET fieldname = (CASE WHEN conditions THEN 'true' ELSE 'false' END)
Case 语句至少在 Oracle 和 MS-SQL 中可用。不知道其他数据库供应商。
如果所有条件在数据结构上都相似,我认为这并不重要。
如果条件有不同的数据查询结构(例如"my key isn't a foreign key in tableB"和"State = 'California'"),设置为true,然后一一检查(作为SQL的序列statements) 更好,因为你可以先检查简单的语句,而不用担心已经删除了标志的记录的复杂语句。
我在两种执行任务的方式之间挣扎。
我有一组条件,当它们都为真时 - 我需要在该记录的 "x" 列属性中设置 "true"。
什么更有效和推荐,为什么?
- 为table中的所有记录将此列设置为"false",然后 运行 在某些条件下设置 "true" 的另一个查询。
- 如果所有条件都满足 "true",则设置 "true",然后 运行 另一个查询以在一个或多个条件失败的所有记录上设置 "false"。
我不能假设 "x" 列的某些默认值需要更改,因为查询应该 运行 也偶尔,当需要时,在初始值是插入到该列,并且某些条件可能与我上次 运行 此查询时有所不同。
或许还有另一种思路,比上面两种更高效?
我也想了解如何高效地计算查询,类似于编程中的高效计算方式。
可能最有效的方法是使用 case 语句,因为您只需每行评估一次条件,并且每行只需修改一次,例如
UPDATE tablename SET fieldname = (CASE WHEN conditions THEN 'true' ELSE 'false' END)
Case 语句至少在 Oracle 和 MS-SQL 中可用。不知道其他数据库供应商。
如果所有条件在数据结构上都相似,我认为这并不重要。
如果条件有不同的数据查询结构(例如"my key isn't a foreign key in tableB"和"State = 'California'"),设置为true,然后一一检查(作为SQL的序列statements) 更好,因为你可以先检查简单的语句,而不用担心已经删除了标志的记录的复杂语句。