mysql - 对于 MySQL InnoDB 中的 View ,多大才算太大?

标签 mysql database database-design innodb

背景

我正在使用一个包含 60 多个表的 MySQL InnoDB 数据库,我正在创建不同的 View ,以便在代码中更快速、更轻松地进行动态查询。我对 20 到 28 个表 的 INNER JOINS(没有多对多关系)有几个 View SELECTING 100 到 120 columns with row count below 5,000 并且它的工作速度很快。

实际问题

我正在创建一个包含 34 ​​个表 的 INNER JOINS(没有多对多关系)的主视图,并使用 行数选择 150 列低于 5,000 似乎太多了。执行单个 SELECT 需要很长时间。我想知道我是否达到了某种 View 大小限制,是否有任何方法可以增加它,或者有什么技巧可以帮助我突破这个明显的限制。

重要的是要注意我不使用聚合函数因为我知道它们对性能的负面影响,顺便说一句我非常担心.

最佳答案

MySql 不使用“System R 算法”(我认为由 Postgresql、Oracle 和 SQL Server 使用),它不仅考虑不同的合并算法(MySQL 只有嵌套循环,尽管你可以伪造一个散列连接通过使用散列索引),还有连接表和可能的索引组合的可能方式。结果似乎是查询的解析 - 和查询执行 - 可以非常快地达到某个点,但性能可能会急剧下降,因为优化器选择了错误的数据路径。

查看您的解释计划并尝试查看是否 a) 性能下降是由于您返回的列数(只需执行 SELECT 1 或其他)或 b) 如果是由于优化器选择表扫描而不是索引使用。

关于mysql - 对于 MySQL InnoDB 中的 View ,多大才算太大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8248616/

相关文章:

php - 使用 php 从 mysql 检索后无法将值作为数组返回

mysql - 如何删除 mysql 数据库中表中的所有行,其中一列的值 = 0?

mysql - 是将表分解并创建具有 3 列 + 外部 ID 的新表,还是只使其成为 n+3 列并且不使用连接更好?

database - 具有多个数据库的 ERD

mysql - 为 varchar 列指定默认的 225 个空格

java - 两台服务器共享数据库

php - 哈希密码 php

node.js - Meteor Mongo 插入失败——访问被拒绝

php - Mysql数据库设计

entity-framework - 具有各种用户角色的数据库设计和 EF 模型