|
15 | 15 | package handle_test
|
16 | 16 |
|
17 | 17 | import (
|
| 18 | + "fmt" |
18 | 19 | "testing"
|
19 | 20 | "time"
|
20 | 21 |
|
@@ -331,3 +332,66 @@ func TestRetry(t *testing.T) {
|
331 | 332 | }
|
332 | 333 | require.NoError(t, failpoint.Disable("github.com/pingcap/tidb/statistics/handle/mockReadStatsForOneFail"))
|
333 | 334 | }
|
| 335 | + |
| 336 | +func TestMergeGlobalStatsIndex(t *testing.T) { |
| 337 | + store := testkit.CreateMockStore(t) |
| 338 | + tk := testkit.NewTestKit(t, store) |
| 339 | + tk.MustExec("use test") |
| 340 | + tk.MustExec(`CREATE TABLE employees3 ( |
| 341 | + emp_id int(11) NOT NULL, |
| 342 | + emp_name varchar(25) NOT NULL, |
| 343 | + salary int(11) NOT NULL, |
| 344 | + dept_id int(11) NOT NULL, |
| 345 | + PRIMARY KEY (emp_id) /*T![clustered_index] NONCLUSTERED */ |
| 346 | +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin |
| 347 | +PARTITION BY RANGE (emp_id) |
| 348 | +( |
| 349 | + PARTITION p0 VALUES LESS THAN (1000), |
| 350 | + PARTITION p1 VALUES LESS THAN (4000), |
| 351 | + PARTITION p2 VALUES LESS THAN (12000), |
| 352 | + PARTITION p3 VALUES LESS THAN (16000), |
| 353 | + PARTITION p4 VALUES LESS THAN (20000), |
| 354 | + PARTITION p5 VALUES LESS THAN (25000), |
| 355 | + PARTITION p6 VALUES LESS THAN (30000), |
| 356 | + PARTITION p7 VALUES LESS THAN (35000), |
| 357 | + PARTITION p8 VALUES LESS THAN (40000), |
| 358 | + PARTITION p9 VALUES LESS THAN (45000), |
| 359 | + PARTITION p10 VALUES LESS THAN (50000), |
| 360 | + PARTITION p11 VALUES LESS THAN (55000), |
| 361 | + PARTITION p12 VALUES LESS THAN (65000), |
| 362 | + PARTITION p13 VALUES LESS THAN (75000), |
| 363 | + PARTITION p14 VALUES LESS THAN (85000), |
| 364 | + PARTITION p15 VALUES LESS THAN (95000), |
| 365 | + PARTITION p16 VALUES LESS THAN (105000), |
| 366 | + PARTITION p17 VALUES LESS THAN (115000), |
| 367 | + PARTITION p18 VALUES LESS THAN (125000), |
| 368 | + PARTITION pmax VALUES LESS THAN (MAXVALUE) |
| 369 | +);`) |
| 370 | + tk.MustExec(` |
| 371 | +SET cte_max_recursion_depth = 1000000000; |
| 372 | +INSERT INTO employees3 |
| 373 | +WITH RECURSIVE EmployeeGenerator AS ( |
| 374 | + SELECT |
| 375 | + 101 AS emp_id, |
| 376 | + 'Emp00001' AS emp_name, |
| 377 | + FLOOR(RAND() * (150000 - 50000) + 50000) AS salary, |
| 378 | + FLOOR(RAND() * 3 + 1) AS dept_id |
| 379 | + UNION ALL |
| 380 | + SELECT |
| 381 | + emp_id + 1, |
| 382 | + CONCAT('Emp', LPAD(CAST(emp_id - 100 AS CHAR), 5, '0')), |
| 383 | + FLOOR(RAND() * (150000 - 50000) + 50000), |
| 384 | + FLOOR(RAND() * 3 + 1) |
| 385 | + FROM |
| 386 | + EmployeeGenerator |
| 387 | + WHERE |
| 388 | + emp_id < 20100 |
| 389 | +) |
| 390 | +SELECT * FROM EmployeeGenerator; |
| 391 | +`) |
| 392 | + tk.MustExec("analyze table employees3") |
| 393 | + for i := 0; i <= 12; i++ { |
| 394 | + tk.MustExec(fmt.Sprintf("analyze table employees3 partition p%d", i)) |
| 395 | + tk.MustQuery("show stats_histograms where table_name='employees3' and Column_name='PRIMARY' and Partition_name='global'").CheckContain("19958") |
| 396 | + } |
| 397 | +} |
0 commit comments