Skip to content

Commit

Permalink
executor: only show valid columns in stats_histogram (pingcap#9487)
Browse files Browse the repository at this point in the history
  • Loading branch information
eurekaka committed Feb 28, 2019
1 parent 103d3b3 commit faf6ed7
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 2 deletions.
4 changes: 4 additions & 0 deletions executor/show_stats.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,10 @@ func (e *ShowExec) fetchShowStatsHistogram() error {
statsTbl := h.GetTableStats(tbl)
if !statsTbl.Pseudo {
for _, col := range statsTbl.Columns {
// Pass a nil StatementContext to avoid column stats being marked as needed.
if statsTbl.ColumnIsInvalid(nil, col.ID) {
continue
}
e.histogramToRow(db.Name.O, tbl.Name.O, col.Info.Name.O, 0, col.Histogram, col.AvgColSize(statsTbl.Count))
}
for _, idx := range statsTbl.Indices {
Expand Down
15 changes: 14 additions & 1 deletion executor/show_stats_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,26 @@ func (s *testSuite) TestShowStatsHistograms(c *C) {
tk.MustExec("drop table if exists t")
tk.MustExec("create table t (a int, b int)")
tk.MustExec("analyze table t")
result := tk.MustQuery("show stats_histograms").Sort()
result := tk.MustQuery("show stats_histograms")
c.Assert(len(result.Rows()), Equals, 0)
tk.MustExec("insert into t values(1,1)")
tk.MustExec("analyze table t")
result = tk.MustQuery("show stats_histograms").Sort()
c.Assert(len(result.Rows()), Equals, 2)
c.Assert(result.Rows()[0][2], Equals, "a")
c.Assert(result.Rows()[1][2], Equals, "b")
result = tk.MustQuery("show stats_histograms where column_name = 'a'")
c.Assert(len(result.Rows()), Equals, 1)
c.Assert(result.Rows()[0][2], Equals, "a")

tk.MustExec("drop table t")
tk.MustExec("create table t(a int, b int, c int, index idx_b(b), index idx_c_a(c, a))")
tk.MustExec("insert into t values(1,null,1),(2,null,2),(3,3,3),(4,null,4),(null,null,null)")
res := tk.MustQuery("show stats_histograms where table_name = 't'")
c.Assert(len(res.Rows()), Equals, 0)
tk.MustExec("analyze table t index idx_b")
res = tk.MustQuery("show stats_histograms where table_name = 't' and column_name = 'idx_b'")
c.Assert(len(res.Rows()), Equals, 1)
}

func (s *testSuite) TestShowStatsBuckets(c *C) {
Expand Down
2 changes: 1 addition & 1 deletion statistics/table.go
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,7 @@ func (coll *HistColl) ColumnIsInvalid(sc *stmtctx.StatementContext, colID int64)
if !ok || coll.Pseudo && col.NotAccurate() {
return true
}
if col.NDV > 0 && col.Len() == 0 && coll.HavePhysicalID {
if col.NDV > 0 && col.Len() == 0 && coll.HavePhysicalID && sc != nil {
sc.SetHistogramsNotLoad()
histogramNeededColumns.insert(tableColumnID{tableID: coll.PhysicalID, columnID: col.Info.ID})
}
Expand Down

0 comments on commit faf6ed7

Please sign in to comment.