sql中的if-else子句,自动重建索引


if else clause in sql, automatic rebuild of indexes

我需要一个sql构造,它提供以下功能。

select if-expression if status='regular' else else-expression 
from table-name ;

此操作将非常频繁地使用。因此,我正在考虑为这次行动建立一个索引。

但,我听说在更新表之后不会重新生成索引。有没有一种方法可以让我们自动重建索引?

提前感谢

您的语句在SQL中的翻译为:

select (case when status = 'regular' then <if-expression> else <else-expression> end)
from tablename;

索引对该查询没有帮助,因为您没有以任何方式限制行。当您在where子句、联接和相关的子查询(有时我认为是group by)中有筛选器时,索引会有所帮助。

正如MarcB在一篇评论中指出的那样,MySQL(以及所有其他数据库)会为插入、更新和删除操作保持索引的最新状态。

您没有提供更详细的示例。

您的想法有几种可供选择的解决方案,而不仅仅是"使用索引卢克解决方案"。这在很大程度上取决于您的数据库。

另一种选择可能是使用"联合"。在某些情况下可能会使用过多的资源,而在另一些情况下,即使使用过多记录,也可能是最佳解决方案。

SELECT
  <if-expression>
FROM
  MyTable
WHERE
  (MyTable.status = 'regular')
UNION
SELECT
  <else-expression>
FROM
  MyTable
WHERE
  (MyTable.status <> 'regular')

而且,在某些情况下,您也可以添加

SELECT
  <if-expression>
FROM
  MyTable
WHERE
  (MyTable.status = 'regular')
ORDER BY <indexed-fields-used-in-expression> 

UNION
SELECT
  <else-expression>
FROM
  MyTable
WHERE
  (MyTable.status <> 'regular')
ORDER BY <indexed-fields-used-in-expression> 

干杯。