MySQL InnoDB中的视图有多大?

chi*_*tty 4 mysql database database-design innodb

背景

我正在使用一个MySQL InnoDB包含60多个表的数据库,我正在创建不同的视图,以便在代码中快速,轻松地进行动态查询.我有一对夫妇与INNER意见联接(没有多到多的关系)的20 to 28 tablesSELECTING 100 to 120 columnsrow count below 5,000它快速的工作照明.

实际问题

我正在使用INNER JOINS创建一个主视图(没有多对多的关系)34 tables和SELECTING about 150 columnswith row count below 5,000,看起来它太多了.做一个SELECT需要永远.我想知道我是否达到某种视图大小限制,如果有任何增加它的方法,或任何技巧可以帮助我通过这个明显的限制.

重要的是要注意我不使用, Aggregate functions因为我知道它们对性能的负面影响,这是我非常关注的方式.

dav*_*vek 5

MySql不使用"System R算法"(我认为是Postgresql,Oracle和SQL Server使用的),它不仅考虑了不同的合并算法(MySQL只有嵌套循环,尽管你可以通过使用a伪造散列连接哈希索引),也是加入表和可能的索引组合的可能方式.结果似乎是查询的解析 - 以及查询执行 - 可以非常快速地达到一定程度,但是当优化器选择错误的数据路径时,性能会急剧下降.

看看你的解释计划和尝试看看,如果A)在性能上的下降是由于您正在返回(只是不选择1或某事)或列数B)如果是由于优化器选择表扫描而不是索引使用.


Mat*_*Bak 3

视图只是一个命名查询。当您引用 MySQL 中的视图时,它只是将名称替换为实际查询并运行它。

您似乎将其与物化视图混淆了,物化视图是您通过查询创建的表。之后您可以查询该表,而不必再次执行原始查询。

MySQL 中未实现物化视图。

为了提高性能,请尝试使用关键字explain来查看可以在哪里优化查询/视图。