Description:
server 5.7.11 perform slowly when select from view with subquery
although server 5.7.10 with the same view perform fast
and the result set is the same data fetched
this example
drop database mytest;
create database mytest character set 'utf8' collate 'utf8_unicode_ci';
use mytest;
CREATE TABLE mytest.`products` (
  `ID` BIGint(20) NOT NULL AUTO_INCREMENT,
  `PRODUCT` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  
  `BASE_PRICE` double(10,4) NOT NULL DEFAULT '0.0000',
  
  `DATE_CREATED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `DATE_MODIFIED` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `USER_ID` INT  NOT NULL,
 
  PRIMARY KEY (`ID`),
  UNIQUE KEY `PRODUCT_UNIQUE` (`PRODUCT`) USING BTREE,
  
  KEY `USER_ID` (`USER_ID`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE mytest.`BRANCHES` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `BRANCH` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
    `DATE_CREATED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `DATE_MODIFIED` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `USER_ID` int(11) NOT NULL,
  PRIMARY KEY (`ID`),
  UNIQUE KEY `BRANCH_UNIQUE` (`BRANCH`) USING BTREE,
  KEY `BUSER_ID` (`USER_ID`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE mytest.`WISH_LIST` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `PRODUCT_ID` INT NOT NULL,
  `BRANCH_ID` INT NOT NULL,
  `DESTINATION_BRANCH_ID` INT NOT NULL,
  `REQUEST_QTY` INT NOT NULL,
    `DATE_CREATED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `DATE_MODIFIED` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `USER_ID` int(11) NOT NULL,
  PRIMARY KEY (`ID`),
  KEY `WPRODUCT_ID` (`PRODUCT_ID`) USING BTREE,
  KEY `WBRANCH_ID` (`BRANCH_ID`) USING BTREE,
   KEY `WDESTINATION_BRANCH_ID`(`DESTINATION_BRANCH_ID`)  USING BTREE,
  KEY `WUSER_ID` (`USER_ID`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `BRANCHES_STOCKS` (
  `ID` bigint(20) NOT NULL AUTO_INCREMENT,
  `PRODUCT_ID` bigint(20) DEFAULT NULL,
  `STOCK_QTY` int NOT NULL,
  `BRANCH_ID` INT NOT NULL,
  `USER_ID` INT NOT NULL,
  `DATE_CREATED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `DATE_MODIFIED` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`ID`),
  KEY `BSUSER_ID` (`USER_ID`) USING BTREE,
  KEY `BSBRANCH_ID` (`BRANCH_ID`) USING BTREE,
   KEY `BSPRODUCT_ID` (`PRODUCT_ID`) USING BTREE
 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE 
    ALGORITHM = UNDEFINED 
    DEFINER = `root`@`%` 
    SQL SECURITY DEFINER
VIEW `wish_list_view` AS
    SELECT 
        `wish_list`.`ID` AS `ID`,
        `wish_list`.`PRODUCT_ID` AS `PRODUCT_ID`,
        `products`.`PRODUCT` AS `PRODUCT`,
        `wish_list`.`REQUEST_QTY` AS `REQUEST_QTY`,
        `wish_list`.`BRANCH_ID` AS `BRANCH_ID`,
        `branches`.`BRANCH` AS `BRANCH`,
        `wish_list`.`DESTINATION_BRANCH_ID` AS `DESTINATION_BRANCH_ID`,
        IFNULL((SELECT 
                        SUM(`branches_stocks`.`STOCK_QTY`)
                    FROM
                        `branches_stocks`
                    WHERE
                        ((`branches_stocks`.`BRANCH_ID` = `wish_list`.`BRANCH_ID`)
                            AND (`branches_stocks`.`PRODUCT_ID` = `wish_list`.`PRODUCT_ID`))),
                0) AS `BRANCH_AVAILABLE_STOCK`,
        IFNULL((SELECT 
                        SUM(`branches_stocks`.`STOCK_QTY`)
                    FROM
                        `branches_stocks`
                    WHERE
                        ((`branches_stocks`.`BRANCH_ID` = `wish_list`.`DESTINATION_BRANCH_ID`)
                            AND (`branches_stocks`.`PRODUCT_ID` = `wish_list`.`PRODUCT_ID`))),
                0) AS `DESTINATION_AVAILABLE_STOCK`,
        IFNULL((SELECT 
                        SUM(`branches_stocks`.`STOCK_QTY`)
                    FROM
                        `branches_stocks`
                    WHERE
                        ((`branches_stocks`.`BRANCH_ID` <> `wish_list`.`DESTINATION_BRANCH_ID`)
                            AND (`branches_stocks`.`BRANCH_ID` <> `wish_list`.`BRANCH_ID`)
                            AND (`branches_stocks`.`PRODUCT_ID` = `wish_list`.`PRODUCT_ID`))),
                0) AS `OTHERS_AVAILABLE_STOCK`,
        `wish_list`.`USER_ID` AS `USER_ID`
    FROM
        ((`wish_list`
        JOIN `products` ON ((`wish_list`.`PRODUCT_ID` = `products`.`ID`)))
        JOIN `branches` ON ((`branches`.`ID` = `wish_list`.`BRANCH_ID`)))
    ORDER BY `products`.`PRODUCT`
explain extened select * from wish_list_view 
in both servers
How to repeat:
view performance issue
  
 
 
 
 
 
Description: server 5.7.11 perform slowly when select from view with subquery although server 5.7.10 with the same view perform fast and the result set is the same data fetched this example drop database mytest; create database mytest character set 'utf8' collate 'utf8_unicode_ci'; use mytest; CREATE TABLE mytest.`products` ( `ID` BIGint(20) NOT NULL AUTO_INCREMENT, `PRODUCT` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `BASE_PRICE` double(10,4) NOT NULL DEFAULT '0.0000', `DATE_CREATED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `DATE_MODIFIED` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, `USER_ID` INT NOT NULL, PRIMARY KEY (`ID`), UNIQUE KEY `PRODUCT_UNIQUE` (`PRODUCT`) USING BTREE, KEY `USER_ID` (`USER_ID`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE mytest.`BRANCHES` ( `ID` INT NOT NULL AUTO_INCREMENT, `BRANCH` varchar(25) COLLATE utf8_unicode_ci NOT NULL, `DATE_CREATED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `DATE_MODIFIED` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, `USER_ID` int(11) NOT NULL, PRIMARY KEY (`ID`), UNIQUE KEY `BRANCH_UNIQUE` (`BRANCH`) USING BTREE, KEY `BUSER_ID` (`USER_ID`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE mytest.`WISH_LIST` ( `ID` INT NOT NULL AUTO_INCREMENT, `PRODUCT_ID` INT NOT NULL, `BRANCH_ID` INT NOT NULL, `DESTINATION_BRANCH_ID` INT NOT NULL, `REQUEST_QTY` INT NOT NULL, `DATE_CREATED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `DATE_MODIFIED` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, `USER_ID` int(11) NOT NULL, PRIMARY KEY (`ID`), KEY `WPRODUCT_ID` (`PRODUCT_ID`) USING BTREE, KEY `WBRANCH_ID` (`BRANCH_ID`) USING BTREE, KEY `WDESTINATION_BRANCH_ID`(`DESTINATION_BRANCH_ID`) USING BTREE, KEY `WUSER_ID` (`USER_ID`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE `BRANCHES_STOCKS` ( `ID` bigint(20) NOT NULL AUTO_INCREMENT, `PRODUCT_ID` bigint(20) DEFAULT NULL, `STOCK_QTY` int NOT NULL, `BRANCH_ID` INT NOT NULL, `USER_ID` INT NOT NULL, `DATE_CREATED` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `DATE_MODIFIED` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`ID`), KEY `BSUSER_ID` (`USER_ID`) USING BTREE, KEY `BSBRANCH_ID` (`BRANCH_ID`) USING BTREE, KEY `BSPRODUCT_ID` (`PRODUCT_ID`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`%` SQL SECURITY DEFINER VIEW `wish_list_view` AS SELECT `wish_list`.`ID` AS `ID`, `wish_list`.`PRODUCT_ID` AS `PRODUCT_ID`, `products`.`PRODUCT` AS `PRODUCT`, `wish_list`.`REQUEST_QTY` AS `REQUEST_QTY`, `wish_list`.`BRANCH_ID` AS `BRANCH_ID`, `branches`.`BRANCH` AS `BRANCH`, `wish_list`.`DESTINATION_BRANCH_ID` AS `DESTINATION_BRANCH_ID`, IFNULL((SELECT SUM(`branches_stocks`.`STOCK_QTY`) FROM `branches_stocks` WHERE ((`branches_stocks`.`BRANCH_ID` = `wish_list`.`BRANCH_ID`) AND (`branches_stocks`.`PRODUCT_ID` = `wish_list`.`PRODUCT_ID`))), 0) AS `BRANCH_AVAILABLE_STOCK`, IFNULL((SELECT SUM(`branches_stocks`.`STOCK_QTY`) FROM `branches_stocks` WHERE ((`branches_stocks`.`BRANCH_ID` = `wish_list`.`DESTINATION_BRANCH_ID`) AND (`branches_stocks`.`PRODUCT_ID` = `wish_list`.`PRODUCT_ID`))), 0) AS `DESTINATION_AVAILABLE_STOCK`, IFNULL((SELECT SUM(`branches_stocks`.`STOCK_QTY`) FROM `branches_stocks` WHERE ((`branches_stocks`.`BRANCH_ID` <> `wish_list`.`DESTINATION_BRANCH_ID`) AND (`branches_stocks`.`BRANCH_ID` <> `wish_list`.`BRANCH_ID`) AND (`branches_stocks`.`PRODUCT_ID` = `wish_list`.`PRODUCT_ID`))), 0) AS `OTHERS_AVAILABLE_STOCK`, `wish_list`.`USER_ID` AS `USER_ID` FROM ((`wish_list` JOIN `products` ON ((`wish_list`.`PRODUCT_ID` = `products`.`ID`))) JOIN `branches` ON ((`branches`.`ID` = `wish_list`.`BRANCH_ID`))) ORDER BY `products`.`PRODUCT` explain extened select * from wish_list_view in both servers How to repeat: view performance issue