Better utilize database indexes for UNION selects
This commit is contained in:
@@ -190,11 +190,18 @@ func (req *QueryRequestPayload) generateSQL(ctx context.Context, schema *orm.Tab
|
||||
}
|
||||
|
||||
selectClause := req.generateSelectClause()
|
||||
query := `SELECT ` + selectClause + ` FROM ( SELECT *, 'memory' as _source FROM main.connections UNION SELECT *, 'history' as _source FROM history.connections) `
|
||||
inMem := `SELECT *, 'live' as _source FROM main.connections `
|
||||
inHistory := `SELECT *, 'history' as _source FROM history.connections `
|
||||
|
||||
if whereClause != "" {
|
||||
query += " WHERE " + whereClause
|
||||
inMem += " WHERE " + whereClause
|
||||
inHistory += " WHERE " + whereClause
|
||||
}
|
||||
|
||||
source := inMem + " UNION " + inHistory
|
||||
|
||||
query := `SELECT ` + selectClause + ` FROM ( ` + source + ` ) `
|
||||
|
||||
query += " " + groupByClause + " " + orderByClause + " " + req.Pagination.toSQLLimitOffsetClause()
|
||||
|
||||
return strings.TrimSpace(query), req.paramMap, nil
|
||||
@@ -298,8 +305,7 @@ func (req *QueryRequestPayload) generateGroupByClause(schema *orm.TableSchema) (
|
||||
func (req *QueryRequestPayload) generateSelectClause() string {
|
||||
selectClause := "*"
|
||||
if len(req.selectedFields) > 0 {
|
||||
selectedFields := append(req.selectedFields, "_source")
|
||||
selectClause = strings.Join(selectedFields, ", ")
|
||||
selectClause = strings.Join(req.selectedFields, ", ")
|
||||
}
|
||||
|
||||
return selectClause
|
||||
|
||||
Reference in New Issue
Block a user