@@ -913,6 +913,7 @@ func TestIssue49986(t *testing.T) {
913
913
tk := testkit .NewTestKit (t , store )
914
914
tk .MustExec ("use test" )
915
915
916
+ << << << < HEAD
916
917
tk .MustExec ("drop table if exists test.t;" )
917
918
tk .MustExec ("create table if not exists test.ast (i varchar(20));" )
918
919
tk .MustExec ("create table if not exists test.acc (j varchar(20), k varchar(20), l varchar(20), m varchar(20));" )
@@ -927,4 +928,69 @@ func TestIssue49986(t *testing.T) {
927
928
" └─TableReader(Probe) 10.00 root data:Selection" ,
928
929
" └─Selection 10.00 cop[tikv] eq(\" astp2019121731703151\" , test.acc.m)" ,
929
930
" └─TableFullScan 10000.00 cop[tikv] table:b keep order:false, stats:pseudo" ))
931
+ == == == =
932
+ for i , version := range []string {"1" , "2" } {
933
+ tk .MustExec ("set @@session.tidb_analyze_version = " + version )
934
+
935
+ // analyze table t
936
+ tk .MustExec ("drop table if exists t" )
937
+ if i != 0 {
938
+ require .Nil (t , h .HandleDDLEvent (<- h .DDLEventCh ()))
939
+ }
940
+ tk .MustExec ("CREATE TABLE t ( a int, b int, c int default 0, key(a) )" +
941
+ "PARTITION BY RANGE (a) (" +
942
+ "PARTITION p0 VALUES LESS THAN (10)," +
943
+ "PARTITION p1 VALUES LESS THAN (20)," +
944
+ "PARTITION p2 VALUES LESS THAN (30)," +
945
+ "PARTITION p3 VALUES LESS THAN (40))" )
946
+ require .Nil (t , h .HandleDDLEvent (<- h .DDLEventCh ()))
947
+ tk .MustExec ("insert into t(a,b) values (1,1), (2,2), (3,3), (15,15), (25,25), (35,35)" )
948
+ tk .MustExec ("ALTER TABLE t ADD UNIQUE INDEX idx(b)" )
949
+ require .Nil (t , h .DumpStatsDeltaToKV (handle .DumpAll ))
950
+ tk .MustExec ("analyze table t" )
951
+ require .Nil (t , h .Update (dom .InfoSchema ()))
952
+ tk .MustQuery ("SELECT b FROM t use index(idx) WHERE b < 16 ORDER BY b" ).
953
+ Check (testkit .Rows ("1" , "2" , "3" , "15" ))
954
+ tk .MustQuery ("EXPLAIN SELECT b FROM t use index(idx) WHERE b < 16 ORDER BY b" ).
955
+ Check (testkit .Rows ("IndexReader_12 4.00 root partition:all index:IndexRangeScan_11" ,
956
+ "└─IndexRangeScan_11 4.00 cop[tikv] table:t, index:idx(b) range:[-inf,16), keep order:true" ))
957
+
958
+ // analyze table t index idx
959
+ tk .MustExec ("drop table if exists t" )
960
+ require .Nil (t , h .HandleDDLEvent (<- h .DDLEventCh ()))
961
+ tk .MustExec ("CREATE TABLE t ( a int, b int, c int default 0, primary key(b, a) clustered )" +
962
+ "PARTITION BY RANGE (a) (" +
963
+ "PARTITION p0 VALUES LESS THAN (10)," +
964
+ "PARTITION p1 VALUES LESS THAN (20)," +
965
+ "PARTITION p2 VALUES LESS THAN (30)," +
966
+ "PARTITION p3 VALUES LESS THAN (40));" )
967
+ require .Nil (t , h .HandleDDLEvent (<- h .DDLEventCh ()))
968
+ tk .MustExec ("insert into t(a,b) values (1,1), (2,2), (3,3), (15,15), (25,25), (35,35)" )
969
+ tk .MustExec ("ALTER TABLE t ADD UNIQUE INDEX idx(b);" )
970
+ require .Nil (t , h .DumpStatsDeltaToKV (handle .DumpAll ))
971
+ tk .MustExec ("analyze table t index idx" )
972
+ require .Nil (t , h .Update (dom .InfoSchema ()))
973
+ rows := tk .MustQuery ("EXPLAIN SELECT b FROM t use index(idx) WHERE b < 16 ORDER BY b;" ).Rows ()
974
+ require .Equal (t , "4.00" , rows [0 ][1 ])
975
+
976
+ // analyze table t index
977
+ tk .MustExec ("drop table if exists t" )
978
+ require .Nil (t , h .HandleDDLEvent (<- h .DDLEventCh ()))
979
+ tk .MustExec ("CREATE TABLE t ( a int, b int, c int default 0, primary key(b, a) clustered )" +
980
+ "PARTITION BY RANGE (a) (" +
981
+ "PARTITION p0 VALUES LESS THAN (10)," +
982
+ "PARTITION p1 VALUES LESS THAN (20)," +
983
+ "PARTITION p2 VALUES LESS THAN (30)," +
984
+ "PARTITION p3 VALUES LESS THAN (40));" )
985
+ require .Nil (t , h .HandleDDLEvent (<- h .DDLEventCh ()))
986
+ tk .MustExec ("insert into t(a,b) values (1,1), (2,2), (3,3), (15,15), (25,25), (35,35)" )
987
+ tk .MustExec ("ALTER TABLE t ADD UNIQUE INDEX idx(b);" )
988
+ require .Nil (t , h .DumpStatsDeltaToKV (handle .DumpAll ))
989
+ tk .MustExec ("analyze table t index" )
990
+ require .Nil (t , h .Update (dom .InfoSchema ()))
991
+ tk .MustQuery ("EXPLAIN SELECT b FROM t use index(idx) WHERE b < 16 ORDER BY b;" ).
992
+ Check (testkit .Rows ("IndexReader_12 4.00 root partition:all index:IndexRangeScan_11" ,
993
+ "└─IndexRangeScan_11 4.00 cop[tikv] table:t, index:idx(b) range:[-inf,16), keep order:true" ))
994
+ }
995
+ >> >> >> > 51 f1a828e47 (statistics : record last gc ts to avoid huge read on stats table (#46138 ))
930
996
}
0 commit comments