chi*_*tty 4 mysql database database-design innodb
背景
我正在使用一个MySQL InnoDB包含60多个表的数据库,我正在创建不同的视图,以便在代码中快速,轻松地进行动态查询.我有一对夫妇与INNER意见联接(没有多到多的关系)的20 to 28 tablesSELECTING 100 to 120 columns用row count below 5,000它快速的工作照明.
实际问题
我正在使用INNER JOINS创建一个主视图(没有多对多的关系)34 tables和SELECTING about 150 columnswith row count below 5,000,看起来它太多了.做一个SELECT需要永远.我想知道我是否达到某种视图大小限制,如果有任何增加它的方法,或任何技巧可以帮助我通过这个明显的限制.
重要的是要注意我不使用, Aggregate functions因为我知道它们对性能的负面影响,这是我非常关注的方式.
MySql不使用"System R算法"(我认为是Postgresql,Oracle和SQL Server使用的),它不仅考虑了不同的合并算法(MySQL只有嵌套循环,尽管你可以通过使用a伪造散列连接哈希索引),也是加入表和可能的索引组合的可能方式.结果似乎是查询的解析 - 以及查询执行 - 可以非常快速地达到一定程度,但是当优化器选择错误的数据路径时,性能会急剧下降.
看看你的解释计划和尝试看看,如果A)在性能上的下降是由于您正在返回(只是不选择1或某事)或列数B)如果是由于优化器选择表扫描而不是索引使用.