创建或替换视图vs检查视图是否存在?

时间:2018-08-17 11:13:42

标签: mysql performance view mariadb

我正在使用Maria DB 5.5版本,并且在创建视图时不允许使用“不存在时创建视图”子句。根据需要,我需要检查在创建时是否查看现有视图。

在这里,我有2种解决此问题的方法...

  1. 使用INFORMATION_SCHEMA.TABLES执行SQL并仅在不存在视图的情况下创建视图
  2. 使用“创建或替换视图”,以便在视图可能必须处理5万条以上记录的情况下,如果视图已经存在,则不会引发任何错误/警告。

在这两个选项中,哪个是更好的建议方法?

2 个答案:

答案 0 :(得分:1)

如果在操作之前必须知道视图是否存在,则使用信息模式将很有帮助。

否则,创建或替换要简单得多。您的视图定义可以单独作为DDL语句使用。

第一个选项要求服务器处理多个查询,因此它将花费比第二个选项稍长的时间。但是视图创建(在MySQL和MariaDB中)非常快:在查询中使用视图之前,不会检索到实际数据。

答案 1 :(得分:0)

因此VIEW包含了许多数据库中不断增长的UNION。因此,VIEW不存在的唯一方法是当两个新用户“同时”更新视图时。

建议的解决方法:

SELECT GET_LOCK('update_view');
DROP VIEW ...;
CREATE VIEW ...;
SELECT RELEASE_LOCK('update_view');

这避免了对OR REPLACE(等等)的需要,除了第一次-DROP VIEW会抱怨VIEW不存在。可以通过在首次配置计算机时创建虚拟VIEW来解决。

(研究GET_LOCK上的参数。)