Changeset: f49a132fc195 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f49a132fc195
Modified Files:
        sql/backends/monet5/sql_statistics.c
        sql/scripts/80_statistics.sql
        sql/storage/store.c
Branch: default
Log Message:

use column_id instead of schema,table,column names to speed up insert and
lookup's


diffs (69 lines):

diff --git a/sql/backends/monet5/sql_statistics.c 
b/sql/backends/monet5/sql_statistics.c
--- a/sql/backends/monet5/sql_statistics.c
+++ b/sql/backends/monet5/sql_statistics.c
@@ -103,7 +103,7 @@ sql_analyze(Client cntxt, MalBlkPtr mb, 
 
                                                if (col && strcmp(bc->name, 
col))
                                                        continue;
-                                               snprintf(dquery, 8192, "delete 
from sys.statistics where \"schema\" ='%s' and \"table\"='%s' and 
\"column\"='%s';", b->name, bt->name, bc->name);
+                                               snprintf(dquery, 8192, "delete 
from sys.statistics where \"column_id\" = %d;", c->base.id);
                                                if (samplesize > 0) {
                                                        bsample = BATsample(bn, 
(BUN) 25000);
                                                } else
@@ -147,8 +147,7 @@ sql_analyze(Client cntxt, MalBlkPtr mb, 
                                                        snprintf(maxval, 4, 
"nil");
                                                        snprintf(minval, 4, 
"nil");
                                                }
-                                               snprintf(query, 8192, "insert 
into sys.statistics values('%s','%s','%s','%s',%d,now()," LLFMT "," LLFMT "," 
LLFMT "," LLFMT ",'%s','%s',%s);", b->name, bt->name, bc->name, 
c->type.type->sqlname, width,
-                                                        (samplesize ? 
samplesize : sz), sz, uniq, nils, minval, maxval, sorted ? "true" : "false");
+                                               snprintf(query, 8192, "insert 
into sys.statistics values(%d,'%s',%d,now()," LLFMT "," LLFMT "," LLFMT "," 
LLFMT ",'%s','%s',%s);", c->base.id, c->type.type->sqlname, width, (samplesize 
? samplesize : sz), sz, uniq, nils, minval, maxval, sorted ? "true" : "false");
 #ifdef DEBUG_SQL_STATISTICS
                                                mnstr_printf(cntxt->fdout, 
"%s\n", dquery);
                                                mnstr_printf(cntxt->fdout, 
"%s\n", query);
diff --git a/sql/scripts/80_statistics.sql b/sql/scripts/80_statistics.sql
--- a/sql/scripts/80_statistics.sql
+++ b/sql/scripts/80_statistics.sql
@@ -21,9 +21,7 @@
 
 
 CREATE TABLE sys.statistics(
-       "schema" string, 
-       "table" string, 
-       "column" string, 
+       "column_id" integer,
        "type" string, 
        width integer,
        stamp timestamp, 
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -4317,12 +4317,8 @@ sql_trans_dist_count( sql_trans *tr, sql
                sql_schema *sys = find_sql_schema(tr, "sys");
                sql_table *stats = find_sql_table(sys, "statistics");
                if (stats) {
-                       sql_column *stats_schema = find_sql_column(stats, 
"schema");
-                       sql_column *stats_table = find_sql_column(stats, 
"table");
-                       sql_column *stats_column = find_sql_column(stats, 
"column");
-                       oid rid = table_funcs.column_find_row(tr, stats_column, 
col->base.name, NULL,
-                                                       stats_table, 
col->t->base.name, NULL,
-                                                       stats_schema, 
col->t->s->base.name, NULL, NULL);
+                       sql_column *stats_column_id = find_sql_column(stats, 
"column_id");
+                       oid rid = table_funcs.column_find_row(tr, 
stats_column_id, &col->base.id, NULL);
                        if (rid != oid_nil) {
                                sql_column *stats_unique = 
find_sql_column(stats, "unique");
                                void *v = table_funcs.column_find_value(tr, 
stats_unique, rid);
@@ -4344,12 +4340,8 @@ sql_trans_ranges( sql_trans *tr, sql_col
                sql_schema *sys = find_sql_schema(tr, "sys");
                sql_table *stats = find_sql_table(sys, "statistics");
                if (stats) {
-                       sql_column *stats_schema = find_sql_column(stats, 
"schema");
-                       sql_column *stats_table = find_sql_column(stats, 
"table");
-                       sql_column *stats_column = find_sql_column(stats, 
"column");
-                       oid rid = table_funcs.column_find_row(tr, stats_column, 
col->base.name, NULL,
-                                                       stats_table, 
col->t->base.name, NULL,
-                                                       stats_schema, 
col->t->s->base.name, NULL, NULL);
+                       sql_column *stats_column_id = find_sql_column(stats, 
"column_id");
+                       oid rid = table_funcs.column_find_row(tr, 
stats_column_id, &col->base.id, NULL);
                        if (rid != oid_nil) {
                                sql_column *stats_min = find_sql_column(stats, 
"minval");
                                sql_column *stats_max = find_sql_column(stats, 
"maxval");
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to