Merge 5.5 into 10.1
This commit is contained in:
commit
bf8fe324d2
@ -37,7 +37,7 @@ IF(CMAKE_VERSION VERSION_LESS "3.6.0")
|
|||||||
SET(CPACK_PACKAGE_FILE_NAME "${CPACK_RPM_PACKAGE_NAME}-${VERSION}-${RPM}-${CMAKE_SYSTEM_PROCESSOR}")
|
SET(CPACK_PACKAGE_FILE_NAME "${CPACK_RPM_PACKAGE_NAME}-${VERSION}-${RPM}-${CMAKE_SYSTEM_PROCESSOR}")
|
||||||
ELSE()
|
ELSE()
|
||||||
SET(CPACK_RPM_FILE_NAME "RPM-DEFAULT")
|
SET(CPACK_RPM_FILE_NAME "RPM-DEFAULT")
|
||||||
SET(CPACK_RPM_DEBUGINFO_PACKAGE ON)
|
SET(CPACK_RPM_DEBUGINFO_PACKAGE ON CACHE INTERNAL "")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
SET(CPACK_RPM_PACKAGE_RELEASE "1%{?dist}")
|
SET(CPACK_RPM_PACKAGE_RELEASE "1%{?dist}")
|
||||||
|
@ -13,6 +13,9 @@
|
|||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
|
||||||
|
|
||||||
|
#ifndef MY_VALGRIND_INCLUDED
|
||||||
|
#define MY_VALGRIND_INCLUDED
|
||||||
|
|
||||||
/* clang -> gcc */
|
/* clang -> gcc */
|
||||||
#ifndef __has_feature
|
#ifndef __has_feature
|
||||||
# define __has_feature(x) 0
|
# define __has_feature(x) 0
|
||||||
@ -33,6 +36,7 @@
|
|||||||
# define MEM_NOACCESS(a,len) VALGRIND_MAKE_MEM_NOACCESS(a,len)
|
# define MEM_NOACCESS(a,len) VALGRIND_MAKE_MEM_NOACCESS(a,len)
|
||||||
# define MEM_CHECK_ADDRESSABLE(a,len) VALGRIND_CHECK_MEM_IS_ADDRESSABLE(a,len)
|
# define MEM_CHECK_ADDRESSABLE(a,len) VALGRIND_CHECK_MEM_IS_ADDRESSABLE(a,len)
|
||||||
# define MEM_CHECK_DEFINED(a,len) VALGRIND_CHECK_MEM_IS_DEFINED(a,len)
|
# define MEM_CHECK_DEFINED(a,len) VALGRIND_CHECK_MEM_IS_DEFINED(a,len)
|
||||||
|
# define REDZONE_SIZE 8
|
||||||
#elif defined(__SANITIZE_ADDRESS__)
|
#elif defined(__SANITIZE_ADDRESS__)
|
||||||
# include <sanitizer/asan_interface.h>
|
# include <sanitizer/asan_interface.h>
|
||||||
/* How to do manual poisoning:
|
/* How to do manual poisoning:
|
||||||
@ -41,11 +45,13 @@ https://github.com/google/sanitizers/wiki/AddressSanitizerManualPoisoning */
|
|||||||
# define MEM_NOACCESS(a,len) ASAN_POISON_MEMORY_REGION(a,len)
|
# define MEM_NOACCESS(a,len) ASAN_POISON_MEMORY_REGION(a,len)
|
||||||
# define MEM_CHECK_ADDRESSABLE(a,len) ((void) 0)
|
# define MEM_CHECK_ADDRESSABLE(a,len) ((void) 0)
|
||||||
# define MEM_CHECK_DEFINED(a,len) ((void) 0)
|
# define MEM_CHECK_DEFINED(a,len) ((void) 0)
|
||||||
|
# define REDZONE_SIZE 8
|
||||||
#else
|
#else
|
||||||
# define MEM_UNDEFINED(a,len) ((void) (a), (void) (len))
|
# define MEM_UNDEFINED(a,len) ((void) (a), (void) (len))
|
||||||
# define MEM_NOACCESS(a,len) ((void) 0)
|
# define MEM_NOACCESS(a,len) ((void) 0)
|
||||||
# define MEM_CHECK_ADDRESSABLE(a,len) ((void) 0)
|
# define MEM_CHECK_ADDRESSABLE(a,len) ((void) 0)
|
||||||
# define MEM_CHECK_DEFINED(a,len) ((void) 0)
|
# define MEM_CHECK_DEFINED(a,len) ((void) 0)
|
||||||
|
# define REDZONE_SIZE 0
|
||||||
#endif /* HAVE_VALGRIND */
|
#endif /* HAVE_VALGRIND */
|
||||||
|
|
||||||
#ifndef DBUG_OFF
|
#ifndef DBUG_OFF
|
||||||
@ -55,3 +61,5 @@ https://github.com/google/sanitizers/wiki/AddressSanitizerManualPoisoning */
|
|||||||
#endif
|
#endif
|
||||||
#define TRASH_ALLOC(A,B) do { TRASH_FILL(A,B,0xA5); MEM_UNDEFINED(A,B); } while(0)
|
#define TRASH_ALLOC(A,B) do { TRASH_FILL(A,B,0xA5); MEM_UNDEFINED(A,B); } while(0)
|
||||||
#define TRASH_FREE(A,B) do { TRASH_FILL(A,B,0x8F); MEM_NOACCESS(A,B); } while(0)
|
#define TRASH_FREE(A,B) do { TRASH_FILL(A,B,0x8F); MEM_NOACCESS(A,B); } while(0)
|
||||||
|
|
||||||
|
#endif /* MY_VALGRIND_INCLUDED */
|
||||||
|
@ -2651,3 +2651,404 @@ Note 1003 select straight_join `test`.`t1`.`c1` AS `c1` from `test`.`t1` where <
|
|||||||
DROP TABLE t1, t2;
|
DROP TABLE t1, t2;
|
||||||
set optimizer_switch=@exit_optimizer_switch;
|
set optimizer_switch=@exit_optimizer_switch;
|
||||||
set join_cache_level=@exit_join_cache_level;
|
set join_cache_level=@exit_join_cache_level;
|
||||||
|
#
|
||||||
|
# Bug mdev-12812: EXPLAIN for query with many expensive derived
|
||||||
|
#
|
||||||
|
CREATE TABLE t1
|
||||||
|
(id int auto_increment primary key,
|
||||||
|
uid int NOT NULL,
|
||||||
|
gp_id int NOT NULL,
|
||||||
|
r int NOT NULL
|
||||||
|
);
|
||||||
|
INSERT INTO t1(uid,gp_id,r) VALUES
|
||||||
|
(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),
|
||||||
|
(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),
|
||||||
|
(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),
|
||||||
|
(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),
|
||||||
|
(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),
|
||||||
|
(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),
|
||||||
|
(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),
|
||||||
|
(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),
|
||||||
|
(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),
|
||||||
|
(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),
|
||||||
|
(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),
|
||||||
|
(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),
|
||||||
|
(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),
|
||||||
|
(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),
|
||||||
|
(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),
|
||||||
|
(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),
|
||||||
|
(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),
|
||||||
|
(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),
|
||||||
|
(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),
|
||||||
|
(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),
|
||||||
|
(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),
|
||||||
|
(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),
|
||||||
|
(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),
|
||||||
|
(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),
|
||||||
|
(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),
|
||||||
|
(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),
|
||||||
|
(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),
|
||||||
|
(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),
|
||||||
|
(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),
|
||||||
|
(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),
|
||||||
|
(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),
|
||||||
|
(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),
|
||||||
|
(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),
|
||||||
|
(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),
|
||||||
|
(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),
|
||||||
|
(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),
|
||||||
|
(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),
|
||||||
|
(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),
|
||||||
|
(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),
|
||||||
|
(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),
|
||||||
|
(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),
|
||||||
|
(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),
|
||||||
|
(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),
|
||||||
|
(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),
|
||||||
|
(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),
|
||||||
|
(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),
|
||||||
|
(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),
|
||||||
|
(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),
|
||||||
|
(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),
|
||||||
|
(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),
|
||||||
|
(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),
|
||||||
|
(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),
|
||||||
|
(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),
|
||||||
|
(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),
|
||||||
|
(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),
|
||||||
|
(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),
|
||||||
|
(1,11,1);
|
||||||
|
CREATE TABLE t2 (id int) ;
|
||||||
|
INSERT INTO t2 VALUES (1);
|
||||||
|
explain SELECT 1 FROM t2 JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
) gp_1 ON gp_1.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
) gp_2 ON gp_2.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p1 ON p1.r=1 AND p1.uid=t2.id
|
||||||
|
JOIN t1 p3 ON p3.r=3 AND p3.uid=t2.id
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
) gp_3 ON gp_3.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p1 ON p1.r=1 AND p1.uid=t2.id
|
||||||
|
JOIN t1 p3 ON p3.r=3 AND p3.uid=t2.id
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
) gp_4 ON gp_4.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p1 ON p1.r=1 AND p1.uid=t2.id
|
||||||
|
JOIN t1 p3 ON p3.r=3 AND p3.uid=t2.id
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
) gp_5 ON gp_5.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p1 ON p1.r=1 AND p1.uid=t2.id
|
||||||
|
JOIN t1 p3 ON p3.r=3 AND p3.uid=t2.id
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
) gp_6 ON gp_6.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p1 ON p1.r=1 AND p1.uid=t2.id
|
||||||
|
JOIN t1 p3 ON p3.r=3 AND p3.uid=t2.id
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
WHERE p1.gp_id=7) gp_7 ON gp_7.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
) gp_8 ON gp_8.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
) gp_9 ON gp_9.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
) gp_14 ON gp_14.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
) gp_15 ON gp_15.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
) gp_16 ON gp_16.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
)gp_17 ON gp_17.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
)gp_18 ON gp_18.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
)gp_19 ON gp_19.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
) gp_20 ON gp_20.id=t2.id ;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY t2 system NULL NULL NULL NULL 1
|
||||||
|
1 PRIMARY t2 system NULL NULL NULL NULL 1
|
||||||
|
1 PRIMARY t2 system NULL NULL NULL NULL 1
|
||||||
|
1 PRIMARY t2 system NULL NULL NULL NULL 1
|
||||||
|
1 PRIMARY t2 system NULL NULL NULL NULL 1
|
||||||
|
1 PRIMARY t2 system NULL NULL NULL NULL 1
|
||||||
|
1 PRIMARY p4 ALL NULL NULL NULL NULL 550 Using where
|
||||||
|
1 PRIMARY p5 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (flat, BNL join)
|
||||||
|
1 PRIMARY p6 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p7 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p8 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p9 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p10 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p4 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p5 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p6 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p7 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p8 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p9 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p10 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p1 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p3 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p4 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p5 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p6 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p7 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p8 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p9 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p10 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p1 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p3 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p4 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p5 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p6 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p7 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p8 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p9 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p10 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p1 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p3 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p4 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p5 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p6 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p7 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p8 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p9 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY p10 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY <derived17> ALL NULL NULL NULL NULL 50328437500000 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY <derived14> ALL NULL NULL NULL NULL 27680640625000000 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY <derived7> ALL NULL NULL NULL NULL 7798774269472204800 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY <derived8> ALL NULL NULL NULL NULL 7798774269472204800 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY <derived9> ALL NULL NULL NULL NULL -3222391729959550976 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY <derived10> ALL NULL NULL NULL NULL -3222391729959550976 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY <derived11> ALL NULL NULL NULL NULL -3222391729959550976 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY <derived12> ALL NULL NULL NULL NULL -3222391729959550976 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY <derived13> ALL NULL NULL NULL NULL -3222391729959550976 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY <derived15> ALL NULL NULL NULL NULL -3222391729959550976 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
1 PRIMARY <derived16> ALL NULL NULL NULL NULL -3222391729959550976 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
17 DERIVED t2 system NULL NULL NULL NULL 1
|
||||||
|
17 DERIVED p4 ALL NULL NULL NULL NULL 550 Using where
|
||||||
|
17 DERIVED p5 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (flat, BNL join)
|
||||||
|
17 DERIVED p6 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
17 DERIVED p7 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
17 DERIVED p8 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
16 DERIVED t2 system NULL NULL NULL NULL 1
|
||||||
|
16 DERIVED p4 ALL NULL NULL NULL NULL 550 Using where
|
||||||
|
16 DERIVED p5 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (flat, BNL join)
|
||||||
|
16 DERIVED p6 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
16 DERIVED p7 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
16 DERIVED p8 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
16 DERIVED p9 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
16 DERIVED p10 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
15 DERIVED t2 system NULL NULL NULL NULL 1
|
||||||
|
15 DERIVED p4 ALL NULL NULL NULL NULL 550 Using where
|
||||||
|
15 DERIVED p5 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (flat, BNL join)
|
||||||
|
15 DERIVED p6 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
15 DERIVED p7 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
15 DERIVED p8 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
15 DERIVED p9 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
15 DERIVED p10 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
14 DERIVED t2 system NULL NULL NULL NULL 1
|
||||||
|
14 DERIVED p4 ALL NULL NULL NULL NULL 550 Using where
|
||||||
|
14 DERIVED p5 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (flat, BNL join)
|
||||||
|
14 DERIVED p7 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
14 DERIVED p8 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
14 DERIVED p9 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
14 DERIVED p10 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
13 DERIVED t2 system NULL NULL NULL NULL 1
|
||||||
|
13 DERIVED p4 ALL NULL NULL NULL NULL 550 Using where
|
||||||
|
13 DERIVED p5 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (flat, BNL join)
|
||||||
|
13 DERIVED p6 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
13 DERIVED p7 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
13 DERIVED p8 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
13 DERIVED p9 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
13 DERIVED p10 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
12 DERIVED t2 system NULL NULL NULL NULL 1
|
||||||
|
12 DERIVED p4 ALL NULL NULL NULL NULL 550 Using where
|
||||||
|
12 DERIVED p5 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (flat, BNL join)
|
||||||
|
12 DERIVED p6 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
12 DERIVED p7 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
12 DERIVED p8 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
12 DERIVED p9 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
12 DERIVED p10 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
11 DERIVED t2 system NULL NULL NULL NULL 1
|
||||||
|
11 DERIVED p4 ALL NULL NULL NULL NULL 550 Using where
|
||||||
|
11 DERIVED p5 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (flat, BNL join)
|
||||||
|
11 DERIVED p6 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
11 DERIVED p7 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
11 DERIVED p8 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
11 DERIVED p9 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
11 DERIVED p10 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
10 DERIVED t2 system NULL NULL NULL NULL 1
|
||||||
|
10 DERIVED p4 ALL NULL NULL NULL NULL 550 Using where
|
||||||
|
10 DERIVED p5 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (flat, BNL join)
|
||||||
|
10 DERIVED p6 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
10 DERIVED p7 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
10 DERIVED p8 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
10 DERIVED p9 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
10 DERIVED p10 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
9 DERIVED t2 system NULL NULL NULL NULL 1
|
||||||
|
9 DERIVED p4 ALL NULL NULL NULL NULL 550 Using where
|
||||||
|
9 DERIVED p5 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (flat, BNL join)
|
||||||
|
9 DERIVED p6 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
9 DERIVED p7 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
9 DERIVED p8 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
9 DERIVED p9 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
9 DERIVED p10 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
8 DERIVED t2 system NULL NULL NULL NULL 1
|
||||||
|
8 DERIVED p1 ALL NULL NULL NULL NULL 550 Using where
|
||||||
|
8 DERIVED p3 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (flat, BNL join)
|
||||||
|
8 DERIVED p4 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
8 DERIVED p5 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
8 DERIVED p6 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
8 DERIVED p7 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
8 DERIVED p8 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
8 DERIVED p9 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
8 DERIVED p10 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
7 DERIVED t2 system NULL NULL NULL NULL 1
|
||||||
|
7 DERIVED p1 ALL NULL NULL NULL NULL 550 Using where
|
||||||
|
7 DERIVED p3 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (flat, BNL join)
|
||||||
|
7 DERIVED p4 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
7 DERIVED p5 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
7 DERIVED p6 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
7 DERIVED p7 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
7 DERIVED p8 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
7 DERIVED p9 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
7 DERIVED p10 ALL NULL NULL NULL NULL 550 Using where; Using join buffer (incremental, BNL join)
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
@ -3189,6 +3189,7 @@ drop table t1,t2,t3;
|
|||||||
#
|
#
|
||||||
# MDEV-18896: IN subquery in WHERE of a table-less query used for INSERT
|
# MDEV-18896: IN subquery in WHERE of a table-less query used for INSERT
|
||||||
#
|
#
|
||||||
|
set @@optimizer_switch= @subselect_sj_tmp;
|
||||||
create table t1 (a1 varchar(25));
|
create table t1 (a1 varchar(25));
|
||||||
create table t2 (a2 varchar(25)) ;
|
create table t2 (a2 varchar(25)) ;
|
||||||
insert into t1 select 'xxx' from dual where 'xxx' in (select a2 from t2);
|
insert into t1 select 'xxx' from dual where 'xxx' in (select a2 from t2);
|
||||||
|
@ -3203,6 +3203,7 @@ drop table t1,t2,t3;
|
|||||||
#
|
#
|
||||||
# MDEV-18896: IN subquery in WHERE of a table-less query used for INSERT
|
# MDEV-18896: IN subquery in WHERE of a table-less query used for INSERT
|
||||||
#
|
#
|
||||||
|
set @@optimizer_switch= @subselect_sj_tmp;
|
||||||
create table t1 (a1 varchar(25));
|
create table t1 (a1 varchar(25));
|
||||||
create table t2 (a2 varchar(25)) ;
|
create table t2 (a2 varchar(25)) ;
|
||||||
insert into t1 select 'xxx' from dual where 'xxx' in (select a2 from t2);
|
insert into t1 select 'xxx' from dual where 'xxx' in (select a2 from t2);
|
||||||
|
@ -1934,3 +1934,263 @@ DROP TABLE t1, t2;
|
|||||||
# The following command must be the last one the file
|
# The following command must be the last one the file
|
||||||
set optimizer_switch=@exit_optimizer_switch;
|
set optimizer_switch=@exit_optimizer_switch;
|
||||||
set join_cache_level=@exit_join_cache_level;
|
set join_cache_level=@exit_join_cache_level;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug mdev-12812: EXPLAIN for query with many expensive derived
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1
|
||||||
|
(id int auto_increment primary key,
|
||||||
|
uid int NOT NULL,
|
||||||
|
gp_id int NOT NULL,
|
||||||
|
r int NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO t1(uid,gp_id,r) VALUES
|
||||||
|
(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),
|
||||||
|
(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),
|
||||||
|
(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),
|
||||||
|
(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),
|
||||||
|
(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),(1,1,1),
|
||||||
|
(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),
|
||||||
|
(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),
|
||||||
|
(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),
|
||||||
|
(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),
|
||||||
|
(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),(1,2,1),
|
||||||
|
(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),
|
||||||
|
(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),
|
||||||
|
(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),
|
||||||
|
(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),
|
||||||
|
(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),(1,3,1),
|
||||||
|
(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),
|
||||||
|
(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),
|
||||||
|
(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),
|
||||||
|
(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),
|
||||||
|
(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),(1,4,1),
|
||||||
|
(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),
|
||||||
|
(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),
|
||||||
|
(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),
|
||||||
|
(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),
|
||||||
|
(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),(1,5,1),
|
||||||
|
(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),
|
||||||
|
(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),
|
||||||
|
(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),
|
||||||
|
(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),
|
||||||
|
(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),(1,6,1),
|
||||||
|
(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),
|
||||||
|
(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),
|
||||||
|
(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),
|
||||||
|
(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),
|
||||||
|
(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),(1,7,1),
|
||||||
|
(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),
|
||||||
|
(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),
|
||||||
|
(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),
|
||||||
|
(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),
|
||||||
|
(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),(1,8,1),
|
||||||
|
(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),
|
||||||
|
(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),
|
||||||
|
(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),
|
||||||
|
(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),
|
||||||
|
(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),(1,9,1),
|
||||||
|
(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),
|
||||||
|
(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),
|
||||||
|
(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),
|
||||||
|
(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),
|
||||||
|
(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),
|
||||||
|
(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,10,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),
|
||||||
|
(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),
|
||||||
|
(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),
|
||||||
|
(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),
|
||||||
|
(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),
|
||||||
|
(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),(1,11,1),
|
||||||
|
(1,11,1);
|
||||||
|
|
||||||
|
CREATE TABLE t2 (id int) ;
|
||||||
|
INSERT INTO t2 VALUES (1);
|
||||||
|
|
||||||
|
explain SELECT 1 FROM t2 JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
) gp_1 ON gp_1.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
) gp_2 ON gp_2.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p1 ON p1.r=1 AND p1.uid=t2.id
|
||||||
|
JOIN t1 p3 ON p3.r=3 AND p3.uid=t2.id
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
) gp_3 ON gp_3.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p1 ON p1.r=1 AND p1.uid=t2.id
|
||||||
|
JOIN t1 p3 ON p3.r=3 AND p3.uid=t2.id
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
) gp_4 ON gp_4.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p1 ON p1.r=1 AND p1.uid=t2.id
|
||||||
|
JOIN t1 p3 ON p3.r=3 AND p3.uid=t2.id
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
) gp_5 ON gp_5.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p1 ON p1.r=1 AND p1.uid=t2.id
|
||||||
|
JOIN t1 p3 ON p3.r=3 AND p3.uid=t2.id
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
) gp_6 ON gp_6.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p1 ON p1.r=1 AND p1.uid=t2.id
|
||||||
|
JOIN t1 p3 ON p3.r=3 AND p3.uid=t2.id
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
WHERE p1.gp_id=7) gp_7 ON gp_7.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
) gp_8 ON gp_8.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
) gp_9 ON gp_9.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
) gp_14 ON gp_14.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
) gp_15 ON gp_15.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
) gp_16 ON gp_16.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
)gp_17 ON gp_17.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
)gp_18 ON gp_18.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
JOIN t1 p9 ON p9.r=9 AND p9.uid=t2.id
|
||||||
|
JOIN t1 p10 ON p10.r=10 AND p10.uid=t2.id
|
||||||
|
)gp_19 ON gp_19.id=t2.id
|
||||||
|
JOIN
|
||||||
|
(SELECT t2.id
|
||||||
|
FROM t2
|
||||||
|
JOIN t1 p4 ON p4.r=4 AND p4.uid=t2.id
|
||||||
|
JOIN t1 p5 ON p5.r=5 AND p5.uid=t2.id
|
||||||
|
JOIN t1 p6 ON p6.r=6 AND p6.uid=t2.id
|
||||||
|
JOIN t1 p7 ON p7.r=7 AND p7.uid=t2.id
|
||||||
|
JOIN t1 p8 ON p8.r=8 AND p8.uid=t2.id
|
||||||
|
) gp_20 ON gp_20.id=t2.id ;
|
||||||
|
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
@ -2877,6 +2877,8 @@ drop table t1,t2,t3;
|
|||||||
--echo # MDEV-18896: IN subquery in WHERE of a table-less query used for INSERT
|
--echo # MDEV-18896: IN subquery in WHERE of a table-less query used for INSERT
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
|
set @@optimizer_switch= @subselect_sj_tmp;
|
||||||
|
|
||||||
create table t1 (a1 varchar(25));
|
create table t1 (a1 varchar(25));
|
||||||
create table t2 (a2 varchar(25)) ;
|
create table t2 (a2 varchar(25)) ;
|
||||||
insert into t1 select 'xxx' from dual where 'xxx' in (select a2 from t2);
|
insert into t1 select 'xxx' from dual where 'xxx' in (select a2 from t2);
|
||||||
|
@ -217,7 +217,7 @@ void *alloc_root(MEM_ROOT *mem_root, size_t length)
|
|||||||
DBUG_SET("-d,simulate_out_of_memory");
|
DBUG_SET("-d,simulate_out_of_memory");
|
||||||
DBUG_RETURN((void*) 0); /* purecov: inspected */
|
DBUG_RETURN((void*) 0); /* purecov: inspected */
|
||||||
});
|
});
|
||||||
length= ALIGN_SIZE(length);
|
length= ALIGN_SIZE(length) + REDZONE_SIZE;
|
||||||
if ((*(prev= &mem_root->free)) != NULL)
|
if ((*(prev= &mem_root->free)) != NULL)
|
||||||
{
|
{
|
||||||
if ((*prev)->left < length &&
|
if ((*prev)->left < length &&
|
||||||
@ -265,6 +265,7 @@ void *alloc_root(MEM_ROOT *mem_root, size_t length)
|
|||||||
mem_root->used= next;
|
mem_root->used= next;
|
||||||
mem_root->first_block_usage= 0;
|
mem_root->first_block_usage= 0;
|
||||||
}
|
}
|
||||||
|
point+= REDZONE_SIZE;
|
||||||
TRASH_ALLOC(point, original_length);
|
TRASH_ALLOC(point, original_length);
|
||||||
DBUG_PRINT("exit",("ptr: %p", point));
|
DBUG_PRINT("exit",("ptr: %p", point));
|
||||||
DBUG_RETURN((void*) point);
|
DBUG_RETURN((void*) point);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2010, 2015, MariaDB
|
Copyright (c) 2010, 2019, MariaDB
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -28,6 +28,7 @@
|
|||||||
|
|
||||||
#include <my_global.h>
|
#include <my_global.h>
|
||||||
#include "sql_base.h"
|
#include "sql_base.h"
|
||||||
|
#include "sql_const.h"
|
||||||
#include "sql_select.h"
|
#include "sql_select.h"
|
||||||
#include "filesort.h"
|
#include "filesort.h"
|
||||||
#include "opt_subselect.h"
|
#include "opt_subselect.h"
|
||||||
@ -522,7 +523,7 @@ bool is_materialization_applicable(THD *thd, Item_in_subselect *in_subs,
|
|||||||
if (optimizer_flag(thd, OPTIMIZER_SWITCH_MATERIALIZATION) && // 0
|
if (optimizer_flag(thd, OPTIMIZER_SWITCH_MATERIALIZATION) && // 0
|
||||||
!child_select->is_part_of_union() && // 1
|
!child_select->is_part_of_union() && // 1
|
||||||
parent_unit->first_select()->leaf_tables.elements && // 2
|
parent_unit->first_select()->leaf_tables.elements && // 2
|
||||||
child_select->outer_select()->leaf_tables.elements && // 2A
|
child_select->outer_select()->table_list.first && // 2A
|
||||||
subquery_types_allow_materialization(in_subs) &&
|
subquery_types_allow_materialization(in_subs) &&
|
||||||
(in_subs->is_top_level_item() || //3
|
(in_subs->is_top_level_item() || //3
|
||||||
optimizer_flag(thd,
|
optimizer_flag(thd,
|
||||||
@ -1383,8 +1384,8 @@ void get_delayed_table_estimates(TABLE *table,
|
|||||||
*startup_cost= item->jtbm_read_time;
|
*startup_cost= item->jtbm_read_time;
|
||||||
|
|
||||||
/* Calculate cost of scanning the temptable */
|
/* Calculate cost of scanning the temptable */
|
||||||
double data_size= item->jtbm_record_count *
|
double data_size= COST_MULT(item->jtbm_record_count,
|
||||||
hash_sj_engine->tmp_table->s->reclength;
|
hash_sj_engine->tmp_table->s->reclength);
|
||||||
/* Do like in handler::read_time */
|
/* Do like in handler::read_time */
|
||||||
*scan_time= data_size/IO_SIZE + 2;
|
*scan_time= data_size/IO_SIZE + 2;
|
||||||
}
|
}
|
||||||
@ -2467,7 +2468,8 @@ bool optimize_semijoin_nests(JOIN *join, table_map all_table_map)
|
|||||||
int tableno;
|
int tableno;
|
||||||
double rows= 1.0;
|
double rows= 1.0;
|
||||||
while ((tableno = tm_it.next_bit()) != Table_map_iterator::BITMAP_END)
|
while ((tableno = tm_it.next_bit()) != Table_map_iterator::BITMAP_END)
|
||||||
rows *= join->map2table[tableno]->table->quick_condition_rows;
|
rows= COST_MULT(rows,
|
||||||
|
join->map2table[tableno]->table->quick_condition_rows);
|
||||||
sjm->rows= MY_MIN(sjm->rows, rows);
|
sjm->rows= MY_MIN(sjm->rows, rows);
|
||||||
}
|
}
|
||||||
memcpy((uchar*) sjm->positions,
|
memcpy((uchar*) sjm->positions,
|
||||||
@ -2581,7 +2583,7 @@ static uint get_tmp_table_rec_length(Item **p_items, uint elements)
|
|||||||
static double
|
static double
|
||||||
get_tmp_table_lookup_cost(THD *thd, double row_count, uint row_size)
|
get_tmp_table_lookup_cost(THD *thd, double row_count, uint row_size)
|
||||||
{
|
{
|
||||||
if (row_count * row_size > thd->variables.max_heap_table_size)
|
if (row_count > thd->variables.max_heap_table_size / (double) row_size)
|
||||||
return (double) DISK_TEMPTABLE_LOOKUP_COST;
|
return (double) DISK_TEMPTABLE_LOOKUP_COST;
|
||||||
else
|
else
|
||||||
return (double) HEAP_TEMPTABLE_LOOKUP_COST;
|
return (double) HEAP_TEMPTABLE_LOOKUP_COST;
|
||||||
@ -2987,8 +2989,11 @@ bool Sj_materialization_picker::check_qep(JOIN *join,
|
|||||||
}
|
}
|
||||||
|
|
||||||
double mat_read_time= prefix_cost.total_cost();
|
double mat_read_time= prefix_cost.total_cost();
|
||||||
mat_read_time += mat_info->materialization_cost.total_cost() +
|
mat_read_time=
|
||||||
prefix_rec_count * mat_info->lookup_cost.total_cost();
|
COST_ADD(mat_read_time,
|
||||||
|
COST_ADD(mat_info->materialization_cost.total_cost(),
|
||||||
|
COST_MULT(prefix_rec_count,
|
||||||
|
mat_info->lookup_cost.total_cost())));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
NOTE: When we pick to use SJM[-Scan] we don't memcpy its POSITION
|
NOTE: When we pick to use SJM[-Scan] we don't memcpy its POSITION
|
||||||
@ -3028,9 +3033,12 @@ bool Sj_materialization_picker::check_qep(JOIN *join,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Add materialization cost */
|
/* Add materialization cost */
|
||||||
prefix_cost += mat_info->materialization_cost.total_cost() +
|
prefix_cost=
|
||||||
prefix_rec_count * mat_info->scan_cost.total_cost();
|
COST_ADD(prefix_cost,
|
||||||
prefix_rec_count *= mat_info->rows;
|
COST_ADD(mat_info->materialization_cost.total_cost(),
|
||||||
|
COST_MULT(prefix_rec_count,
|
||||||
|
mat_info->scan_cost.total_cost())));
|
||||||
|
prefix_rec_count= COST_MULT(prefix_rec_count, mat_info->rows);
|
||||||
|
|
||||||
uint i;
|
uint i;
|
||||||
table_map rem_tables= remaining_tables;
|
table_map rem_tables= remaining_tables;
|
||||||
@ -3044,8 +3052,8 @@ bool Sj_materialization_picker::check_qep(JOIN *join,
|
|||||||
{
|
{
|
||||||
best_access_path(join, join->positions[i].table, rem_tables, i,
|
best_access_path(join, join->positions[i].table, rem_tables, i,
|
||||||
disable_jbuf, prefix_rec_count, &curpos, &dummy);
|
disable_jbuf, prefix_rec_count, &curpos, &dummy);
|
||||||
prefix_rec_count *= curpos.records_read;
|
prefix_rec_count= COST_MULT(prefix_rec_count, curpos.records_read);
|
||||||
prefix_cost += curpos.read_time;
|
prefix_cost= COST_ADD(prefix_cost, curpos.read_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
*strategy= SJ_OPT_MATERIALIZE_SCAN;
|
*strategy= SJ_OPT_MATERIALIZE_SCAN;
|
||||||
@ -3352,16 +3360,18 @@ bool Duplicate_weedout_picker::check_qep(JOIN *join,
|
|||||||
for (uint j= first_dupsweedout_table; j <= idx; j++)
|
for (uint j= first_dupsweedout_table; j <= idx; j++)
|
||||||
{
|
{
|
||||||
POSITION *p= join->positions + j;
|
POSITION *p= join->positions + j;
|
||||||
current_fanout *= p->records_read;
|
current_fanout= COST_MULT(current_fanout, p->records_read);
|
||||||
dups_cost += p->read_time + current_fanout / TIME_FOR_COMPARE;
|
dups_cost= COST_ADD(dups_cost,
|
||||||
|
COST_ADD(p->read_time,
|
||||||
|
current_fanout / TIME_FOR_COMPARE));
|
||||||
if (p->table->emb_sj_nest)
|
if (p->table->emb_sj_nest)
|
||||||
{
|
{
|
||||||
sj_inner_fanout *= p->records_read;
|
sj_inner_fanout= COST_MULT(sj_inner_fanout, p->records_read);
|
||||||
dups_removed_fanout |= p->table->table->map;
|
dups_removed_fanout |= p->table->table->map;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sj_outer_fanout *= p->records_read;
|
sj_outer_fanout= COST_MULT(sj_outer_fanout, p->records_read);
|
||||||
temptable_rec_size += p->table->table->file->ref_length;
|
temptable_rec_size += p->table->table->file->ref_length;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3380,12 +3390,13 @@ bool Duplicate_weedout_picker::check_qep(JOIN *join,
|
|||||||
sj_outer_fanout,
|
sj_outer_fanout,
|
||||||
temptable_rec_size);
|
temptable_rec_size);
|
||||||
|
|
||||||
double write_cost= join->positions[first_tab].prefix_record_count*
|
double write_cost= COST_MULT(join->positions[first_tab].prefix_record_count,
|
||||||
sj_outer_fanout * one_write_cost;
|
sj_outer_fanout * one_write_cost);
|
||||||
double full_lookup_cost= join->positions[first_tab].prefix_record_count*
|
double full_lookup_cost=
|
||||||
sj_outer_fanout* sj_inner_fanout *
|
COST_MULT(join->positions[first_tab].prefix_record_count,
|
||||||
one_lookup_cost;
|
COST_MULT(sj_outer_fanout,
|
||||||
dups_cost += write_cost + full_lookup_cost;
|
sj_inner_fanout * one_lookup_cost));
|
||||||
|
dups_cost= COST_ADD(dups_cost, COST_ADD(write_cost, full_lookup_cost));
|
||||||
|
|
||||||
*read_time= dups_cost;
|
*read_time= dups_cost;
|
||||||
*record_count= prefix_rec_count * sj_outer_fanout;
|
*record_count= prefix_rec_count * sj_outer_fanout;
|
||||||
@ -3532,8 +3543,8 @@ static void recalculate_prefix_record_count(JOIN *join, uint start, uint end)
|
|||||||
if (j == join->const_tables)
|
if (j == join->const_tables)
|
||||||
prefix_count= 1.0;
|
prefix_count= 1.0;
|
||||||
else
|
else
|
||||||
prefix_count= join->best_positions[j-1].prefix_record_count *
|
prefix_count= COST_MULT(join->best_positions[j-1].prefix_record_count,
|
||||||
join->best_positions[j-1].records_read;
|
join->best_positions[j-1].records_read);
|
||||||
|
|
||||||
join->best_positions[j].prefix_record_count= prefix_count;
|
join->best_positions[j].prefix_record_count= prefix_count;
|
||||||
}
|
}
|
||||||
@ -5882,14 +5893,16 @@ bool JOIN::choose_subquery_plan(table_map join_tables)
|
|||||||
The cost of executing the subquery and storing its result in an indexed
|
The cost of executing the subquery and storing its result in an indexed
|
||||||
temporary table.
|
temporary table.
|
||||||
*/
|
*/
|
||||||
double materialization_cost= inner_read_time_1 +
|
double materialization_cost= COST_ADD(inner_read_time_1,
|
||||||
write_cost * inner_record_count_1;
|
COST_MULT(write_cost,
|
||||||
|
inner_record_count_1));
|
||||||
|
|
||||||
materialize_strategy_cost= materialization_cost +
|
materialize_strategy_cost= COST_ADD(materialization_cost,
|
||||||
outer_lookup_keys * lookup_cost;
|
COST_MULT(outer_lookup_keys,
|
||||||
|
lookup_cost));
|
||||||
|
|
||||||
/* C.2 Compute the cost of the IN=>EXISTS strategy. */
|
/* C.2 Compute the cost of the IN=>EXISTS strategy. */
|
||||||
in_exists_strategy_cost= outer_lookup_keys * inner_read_time_2;
|
in_exists_strategy_cost= COST_MULT(outer_lookup_keys, inner_read_time_2);
|
||||||
|
|
||||||
/* C.3 Compare the costs and choose the cheaper strategy. */
|
/* C.3 Compare the costs and choose the cheaper strategy. */
|
||||||
if (materialize_strategy_cost >= in_exists_strategy_cost)
|
if (materialize_strategy_cost >= in_exists_strategy_cost)
|
||||||
|
@ -234,6 +234,14 @@
|
|||||||
#define HEAP_TEMPTABLE_LOOKUP_COST 0.05
|
#define HEAP_TEMPTABLE_LOOKUP_COST 0.05
|
||||||
#define DISK_TEMPTABLE_LOOKUP_COST 1.0
|
#define DISK_TEMPTABLE_LOOKUP_COST 1.0
|
||||||
|
|
||||||
|
|
||||||
|
#define COST_MAX (DBL_MAX * (1.0 - DBL_EPSILON))
|
||||||
|
|
||||||
|
#define COST_ADD(c,d) (COST_MAX - (d) > (c) ? (c) + (d) : COST_MAX)
|
||||||
|
|
||||||
|
#define COST_MULT(c,f) (COST_MAX / (f) > (c) ? (c) * (f) : COST_MAX)
|
||||||
|
|
||||||
|
|
||||||
#define MY_CHARSET_BIN_MB_MAXLEN 1
|
#define MY_CHARSET_BIN_MB_MAXLEN 1
|
||||||
|
|
||||||
/** Don't pack string keys shorter than this (if PACK_KEYS=1 isn't used). */
|
/** Don't pack string keys shorter than this (if PACK_KEYS=1 isn't used). */
|
||||||
|
@ -4022,6 +4022,13 @@ end_with_restore_list:
|
|||||||
*/
|
*/
|
||||||
/* Skip first table, which is the table we are inserting in */
|
/* Skip first table, which is the table we are inserting in */
|
||||||
TABLE_LIST *second_table= first_table->next_local;
|
TABLE_LIST *second_table= first_table->next_local;
|
||||||
|
/*
|
||||||
|
This is a hack: this leaves select_lex->table_list in an inconsistent
|
||||||
|
state as 'elements' does not contain number of elements in the list.
|
||||||
|
Moreover, if second_table == NULL then 'next' becomes invalid.
|
||||||
|
TODO: fix it by removing the front element (restoring of it should
|
||||||
|
be done properly as well)
|
||||||
|
*/
|
||||||
select_lex->table_list.first= second_table;
|
select_lex->table_list.first= second_table;
|
||||||
select_lex->context.table_list=
|
select_lex->context.table_list=
|
||||||
select_lex->context.first_name_resolution_table= second_table;
|
select_lex->context.first_name_resolution_table= second_table;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Copyright (c) 2000, 2016 Oracle and/or its affiliates.
|
/* Copyright (c) 2000, 2016, Oracle and/or its affiliates.
|
||||||
Copyright (c) 2009, 2018 MariaDB Corporation
|
Copyright (c) 2009, 2019, MariaDB Corporation.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -6153,7 +6153,7 @@ best_access_path(JOIN *join,
|
|||||||
else
|
else
|
||||||
tmp= table->file->read_time(key, 1,
|
tmp= table->file->read_time(key, 1,
|
||||||
(ha_rows) MY_MIN(tmp,s->worst_seeks));
|
(ha_rows) MY_MIN(tmp,s->worst_seeks));
|
||||||
tmp*= record_count;
|
tmp= COST_MULT(tmp, record_count);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -6318,18 +6318,18 @@ best_access_path(JOIN *join,
|
|||||||
else
|
else
|
||||||
tmp= table->file->read_time(key, 1,
|
tmp= table->file->read_time(key, 1,
|
||||||
(ha_rows) MY_MIN(tmp,s->worst_seeks));
|
(ha_rows) MY_MIN(tmp,s->worst_seeks));
|
||||||
tmp*= record_count;
|
tmp= COST_MULT(tmp, record_count);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
tmp= best_time; // Do nothing
|
tmp= best_time; // Do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp += s->startup_cost;
|
tmp= COST_ADD(tmp, s->startup_cost);
|
||||||
loose_scan_opt.check_ref_access_part2(key, start_key, records, tmp);
|
loose_scan_opt.check_ref_access_part2(key, start_key, records, tmp);
|
||||||
} /* not ft_key */
|
} /* not ft_key */
|
||||||
if (tmp + 0.0001 < best_time - records/(double) TIME_FOR_COMPARE)
|
if (tmp + 0.0001 < best_time - records/(double) TIME_FOR_COMPARE)
|
||||||
{
|
{
|
||||||
best_time= tmp + records/(double) TIME_FOR_COMPARE;
|
best_time= COST_ADD(tmp, records/(double) TIME_FOR_COMPARE);
|
||||||
best= tmp;
|
best= tmp;
|
||||||
best_records= records;
|
best_records= records;
|
||||||
best_key= start_key;
|
best_key= start_key;
|
||||||
@ -6363,14 +6363,18 @@ best_access_path(JOIN *join,
|
|||||||
use_cond_selectivity);
|
use_cond_selectivity);
|
||||||
|
|
||||||
tmp= s->quick ? s->quick->read_time : s->scan_time();
|
tmp= s->quick ? s->quick->read_time : s->scan_time();
|
||||||
tmp+= (s->records - rnd_records)/(double) TIME_FOR_COMPARE;
|
double cmp_time= (s->records - rnd_records)/(double) TIME_FOR_COMPARE;
|
||||||
|
tmp= COST_ADD(tmp, cmp_time);
|
||||||
|
|
||||||
/* We read the table as many times as join buffer becomes full. */
|
/* We read the table as many times as join buffer becomes full. */
|
||||||
tmp*= (1.0 + floor((double) cache_record_length(join,idx) *
|
|
||||||
|
double refills= (1.0 + floor((double) cache_record_length(join,idx) *
|
||||||
record_count /
|
record_count /
|
||||||
(double) thd->variables.join_buff_size));
|
(double) thd->variables.join_buff_size));
|
||||||
best_time= tmp +
|
tmp= COST_MULT(tmp, refills);
|
||||||
(record_count*join_sel) / TIME_FOR_COMPARE * rnd_records;
|
best_time= COST_ADD(tmp,
|
||||||
|
COST_MULT((record_count*join_sel) / TIME_FOR_COMPARE,
|
||||||
|
rnd_records));
|
||||||
best= tmp;
|
best= tmp;
|
||||||
records= rnd_records;
|
records= rnd_records;
|
||||||
best_key= hj_start_key;
|
best_key= hj_start_key;
|
||||||
@ -6441,9 +6445,9 @@ best_access_path(JOIN *join,
|
|||||||
access (see first else-branch below), but we don't take it into
|
access (see first else-branch below), but we don't take it into
|
||||||
account here for range/index_merge access. Find out why this is so.
|
account here for range/index_merge access. Find out why this is so.
|
||||||
*/
|
*/
|
||||||
tmp= record_count *
|
double cmp_time= (s->found_records - rnd_records)/(double) TIME_FOR_COMPARE;
|
||||||
(s->quick->read_time +
|
tmp= COST_MULT(record_count,
|
||||||
(s->found_records - rnd_records)/(double) TIME_FOR_COMPARE);
|
COST_ADD(s->quick->read_time, cmp_time));
|
||||||
|
|
||||||
loose_scan_opt.check_range_access(join, idx, s->quick);
|
loose_scan_opt.check_range_access(join, idx, s->quick);
|
||||||
}
|
}
|
||||||
@ -6462,16 +6466,15 @@ best_access_path(JOIN *join,
|
|||||||
- read the whole table record
|
- read the whole table record
|
||||||
- skip rows which does not satisfy join condition
|
- skip rows which does not satisfy join condition
|
||||||
*/
|
*/
|
||||||
tmp= record_count *
|
double cmp_time= (s->records - rnd_records)/(double) TIME_FOR_COMPARE;
|
||||||
(tmp +
|
tmp= COST_MULT(record_count, COST_ADD(tmp,cmp_time));
|
||||||
(s->records - rnd_records)/(double) TIME_FOR_COMPARE);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* We read the table as many times as join buffer becomes full. */
|
double refills= (1.0 + floor((double) cache_record_length(join,idx) *
|
||||||
tmp*= (1.0 + floor((double) cache_record_length(join,idx) *
|
(record_count /
|
||||||
record_count /
|
(double) thd->variables.join_buff_size)));
|
||||||
(double) thd->variables.join_buff_size));
|
tmp= COST_MULT(tmp, refills);
|
||||||
/*
|
/*
|
||||||
We don't make full cartesian product between rows in the scanned
|
We don't make full cartesian product between rows in the scanned
|
||||||
table and existing records because we skip all rows from the
|
table and existing records because we skip all rows from the
|
||||||
@ -6479,7 +6482,8 @@ best_access_path(JOIN *join,
|
|||||||
we read the table (see flush_cached_records for details). Here we
|
we read the table (see flush_cached_records for details). Here we
|
||||||
take into account cost to read and skip these records.
|
take into account cost to read and skip these records.
|
||||||
*/
|
*/
|
||||||
tmp+= (s->records - rnd_records)/(double) TIME_FOR_COMPARE;
|
double cmp_time= (s->records - rnd_records)/(double) TIME_FOR_COMPARE;
|
||||||
|
tmp= COST_ADD(tmp, cmp_time);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6490,9 +6494,9 @@ best_access_path(JOIN *join,
|
|||||||
tmp give us total cost of using TABLE SCAN
|
tmp give us total cost of using TABLE SCAN
|
||||||
*/
|
*/
|
||||||
if (best == DBL_MAX ||
|
if (best == DBL_MAX ||
|
||||||
(tmp + record_count/(double) TIME_FOR_COMPARE*rnd_records <
|
COST_ADD(tmp, record_count/(double) TIME_FOR_COMPARE*rnd_records) <
|
||||||
(best_key->is_for_hash_join() ? best_time :
|
(best_key->is_for_hash_join() ? best_time :
|
||||||
best + record_count/(double) TIME_FOR_COMPARE*records)))
|
COST_ADD(best, record_count/(double) TIME_FOR_COMPARE*records)))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
If the table has a range (s->quick is set) make_join_select()
|
If the table has a range (s->quick is set) make_join_select()
|
||||||
@ -7021,9 +7025,10 @@ optimize_straight_join(JOIN *join, table_map join_tables)
|
|||||||
join->positions + idx, &loose_scan_pos);
|
join->positions + idx, &loose_scan_pos);
|
||||||
|
|
||||||
/* compute the cost of the new plan extended with 's' */
|
/* compute the cost of the new plan extended with 's' */
|
||||||
record_count*= join->positions[idx].records_read;
|
record_count= COST_MULT(record_count, join->positions[idx].records_read);
|
||||||
read_time+= join->positions[idx].read_time +
|
read_time= COST_ADD(read_time,
|
||||||
record_count / (double) TIME_FOR_COMPARE;
|
COST_ADD(join->positions[idx].read_time,
|
||||||
|
record_count / (double) TIME_FOR_COMPARE));
|
||||||
advance_sj_state(join, join_tables, idx, &record_count, &read_time,
|
advance_sj_state(join, join_tables, idx, &record_count, &read_time,
|
||||||
&loose_scan_pos);
|
&loose_scan_pos);
|
||||||
|
|
||||||
@ -7213,9 +7218,10 @@ greedy_search(JOIN *join,
|
|||||||
swap_variables(JOIN_TAB*, join->best_ref[idx], join->best_ref[best_idx]);
|
swap_variables(JOIN_TAB*, join->best_ref[idx], join->best_ref[best_idx]);
|
||||||
|
|
||||||
/* compute the cost of the new plan extended with 'best_table' */
|
/* compute the cost of the new plan extended with 'best_table' */
|
||||||
record_count*= join->positions[idx].records_read;
|
record_count= COST_MULT(record_count, join->positions[idx].records_read);
|
||||||
read_time+= join->positions[idx].read_time +
|
read_time= COST_ADD(read_time,
|
||||||
record_count / (double) TIME_FOR_COMPARE;
|
COST_ADD(join->positions[idx].read_time,
|
||||||
|
record_count / (double) TIME_FOR_COMPARE));
|
||||||
|
|
||||||
remaining_tables&= ~(best_table->table->map);
|
remaining_tables&= ~(best_table->table->map);
|
||||||
--size_remain;
|
--size_remain;
|
||||||
@ -7322,10 +7328,12 @@ void JOIN::get_partial_cost_and_fanout(int end_tab_idx,
|
|||||||
}
|
}
|
||||||
if (tab->records_read && (cur_table_map & filter_map))
|
if (tab->records_read && (cur_table_map & filter_map))
|
||||||
{
|
{
|
||||||
record_count *= tab->records_read;
|
record_count= COST_MULT(record_count, tab->records_read);
|
||||||
read_time += tab->read_time + record_count / (double) TIME_FOR_COMPARE;
|
read_time= COST_ADD(read_time,
|
||||||
|
COST_ADD(tab->read_time,
|
||||||
|
record_count / (double) TIME_FOR_COMPARE));
|
||||||
if (tab->emb_sj_nest)
|
if (tab->emb_sj_nest)
|
||||||
sj_inner_fanout *= tab->records_read;
|
sj_inner_fanout= COST_MULT(sj_inner_fanout, tab->records_read);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i == last_sj_table)
|
if (i == last_sj_table)
|
||||||
@ -7364,8 +7372,8 @@ void JOIN::get_prefix_cost_and_fanout(uint n_tables,
|
|||||||
{
|
{
|
||||||
if (best_positions[i].records_read)
|
if (best_positions[i].records_read)
|
||||||
{
|
{
|
||||||
record_count *= best_positions[i].records_read;
|
record_count= COST_MULT(record_count, best_positions[i].records_read);
|
||||||
read_time += best_positions[i].read_time;
|
read_time= COST_ADD(read_time, best_positions[i].read_time);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*read_time_arg= read_time;// + record_count / TIME_FOR_COMPARE;
|
*read_time_arg= read_time;// + record_count / TIME_FOR_COMPARE;
|
||||||
@ -7926,13 +7934,12 @@ best_extension_by_limited_search(JOIN *join,
|
|||||||
best_access_path(join, s, remaining_tables, idx, disable_jbuf,
|
best_access_path(join, s, remaining_tables, idx, disable_jbuf,
|
||||||
record_count, join->positions + idx, &loose_scan_pos);
|
record_count, join->positions + idx, &loose_scan_pos);
|
||||||
|
|
||||||
/* Compute the cost of extending the plan with 's', avoid overflow */
|
/* Compute the cost of extending the plan with 's' */
|
||||||
if (position->records_read < DBL_MAX / record_count)
|
current_record_count= COST_MULT(record_count, position->records_read);
|
||||||
current_record_count= record_count * position->records_read;
|
current_read_time=COST_ADD(read_time,
|
||||||
else
|
COST_ADD(position->read_time,
|
||||||
current_record_count= DBL_MAX;
|
current_record_count /
|
||||||
current_read_time=read_time + position->read_time +
|
(double) TIME_FOR_COMPARE));
|
||||||
current_record_count / (double) TIME_FOR_COMPARE;
|
|
||||||
|
|
||||||
advance_sj_state(join, remaining_tables, idx, ¤t_record_count,
|
advance_sj_state(join, remaining_tables, idx, ¤t_record_count,
|
||||||
¤t_read_time, &loose_scan_pos);
|
¤t_read_time, &loose_scan_pos);
|
||||||
@ -8019,7 +8026,7 @@ best_extension_by_limited_search(JOIN *join,
|
|||||||
heuristic since we cannot know for sure at this point.
|
heuristic since we cannot know for sure at this point.
|
||||||
Hence it may be wrong.
|
Hence it may be wrong.
|
||||||
*/
|
*/
|
||||||
current_read_time+= current_record_count;
|
current_read_time= COST_ADD(current_read_time, current_record_count);
|
||||||
if (current_read_time < join->best_read)
|
if (current_read_time < join->best_read)
|
||||||
{
|
{
|
||||||
memcpy((uchar*) join->best_positions, (uchar*) join->positions,
|
memcpy((uchar*) join->best_positions, (uchar*) join->positions,
|
||||||
@ -8063,11 +8070,11 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count,
|
|||||||
DBUG_PRINT("best",("read_time: %g record_count: %g",read_time,
|
DBUG_PRINT("best",("read_time: %g record_count: %g",read_time,
|
||||||
record_count));
|
record_count));
|
||||||
|
|
||||||
read_time+=record_count/(double) TIME_FOR_COMPARE;
|
read_time= COST_ADD(read_time, record_count/(double) TIME_FOR_COMPARE);
|
||||||
if (join->sort_by_table &&
|
if (join->sort_by_table &&
|
||||||
join->sort_by_table !=
|
join->sort_by_table !=
|
||||||
join->positions[join->const_tables].table->table)
|
join->positions[join->const_tables].table->table)
|
||||||
read_time+=record_count; // We have to make a temp table
|
read_time= COST_ADD(read_time, record_count); // We have to make a temp table
|
||||||
if (read_time < join->best_read)
|
if (read_time < join->best_read)
|
||||||
{
|
{
|
||||||
memcpy((uchar*) join->best_positions,(uchar*) join->positions,
|
memcpy((uchar*) join->best_positions,(uchar*) join->positions,
|
||||||
@ -8076,7 +8083,8 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count,
|
|||||||
}
|
}
|
||||||
DBUG_RETURN(FALSE);
|
DBUG_RETURN(FALSE);
|
||||||
}
|
}
|
||||||
if (read_time+record_count/(double) TIME_FOR_COMPARE >= join->best_read)
|
if (COST_ADD(read_time, record_count/(double) TIME_FOR_COMPARE)
|
||||||
|
>= join->best_read)
|
||||||
DBUG_RETURN(FALSE); /* Found better before */
|
DBUG_RETURN(FALSE); /* Found better before */
|
||||||
|
|
||||||
JOIN_TAB *s;
|
JOIN_TAB *s;
|
||||||
@ -8098,8 +8106,8 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count,
|
|||||||
Go to the next level only if there hasn't been a better key on
|
Go to the next level only if there hasn't been a better key on
|
||||||
this level! This will cut down the search for a lot simple cases!
|
this level! This will cut down the search for a lot simple cases!
|
||||||
*/
|
*/
|
||||||
double current_record_count=record_count*records;
|
double current_record_count= COST_MULT(record_count, records);
|
||||||
double current_read_time=read_time+best;
|
double current_read_time= COST_ADD(read_time, best);
|
||||||
advance_sj_state(join, rest_tables, idx, ¤t_record_count,
|
advance_sj_state(join, rest_tables, idx, ¤t_record_count,
|
||||||
¤t_read_time, &loose_scan_pos);
|
¤t_read_time, &loose_scan_pos);
|
||||||
|
|
||||||
@ -8436,7 +8444,7 @@ prev_record_reads(POSITION *positions, uint idx, table_map found_ref)
|
|||||||
#max_nested_outer_joins=64-1) will not make it any more precise.
|
#max_nested_outer_joins=64-1) will not make it any more precise.
|
||||||
*/
|
*/
|
||||||
if (pos->records_read)
|
if (pos->records_read)
|
||||||
found*= pos->records_read;
|
found= COST_MULT(found, pos->records_read);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return found;
|
return found;
|
||||||
@ -15171,11 +15179,12 @@ void optimize_wo_join_buffering(JOIN *join, uint first_tab, uint last_tab,
|
|||||||
pos= loose_scan_pos;
|
pos= loose_scan_pos;
|
||||||
|
|
||||||
reopt_remaining_tables &= ~rs->table->map;
|
reopt_remaining_tables &= ~rs->table->map;
|
||||||
rec_count *= pos.records_read;
|
rec_count= COST_MULT(rec_count, pos.records_read);
|
||||||
cost += pos.read_time;
|
cost= COST_ADD(cost, pos.read_time);
|
||||||
|
|
||||||
|
|
||||||
if (!rs->emb_sj_nest)
|
if (!rs->emb_sj_nest)
|
||||||
*outer_rec_count *= pos.records_read;
|
*outer_rec_count= COST_MULT(*outer_rec_count, pos.records_read);
|
||||||
}
|
}
|
||||||
join->cur_sj_inner_tables= save_cur_sj_inner_tables;
|
join->cur_sj_inner_tables= save_cur_sj_inner_tables;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user