[Groonga-commit] groonga/groonga at dd2a071 [master] select: improve performance for equal search and enough filtered case

Back to archive index

Kouhei Sutou null+****@clear*****
Fri May 6 16:20:59 JST 2016


Kouhei Sutou	2016-05-06 16:20:59 +0900 (Fri, 06 May 2016)

  New Revision: dd2a0712654e65f7cff634697abe4b9b3613a7f0
  https://github.com/groonga/groonga/commit/dd2a0712654e65f7cff634697abe4b9b3613a7f0

  Message:
    select: improve performance for equal search and enough filtered case
    
    This may improve performance when a table has many records and two
    conditions such as --filter 'content @ "keyword" && price == 1000'. If
    'content @ "keyword"' filters many records, 'price == 1000' may be
    evaluated as sequential search instead of index search. Sequential
    search is faster than index search when the number of remained records
    is less.

  Added files:
    test/command/suite/select/filter/index/equal/optimization/use_sequential_search/int32.expected
    test/command/suite/select/filter/index/equal/optimization/use_sequential_search/int32.test
    test/command/suite/select/filter/index/equal/optimization/use_sequential_search/short_text_no_normalizer.expected
    test/command/suite/select/filter/index/equal/optimization/use_sequential_search/short_text_no_normalizer.test
    test/command/suite/select/filter/index/equal/optimization/use_sequential_search/short_text_normalizer_auto.expected
    test/command/suite/select/filter/index/equal/optimization/use_sequential_search/short_text_normalizer_auto.test
  Modified files:
    lib/expr.c

  Modified: lib/expr.c (+26 -1)
===================================================================
--- lib/expr.c    2016-05-06 16:02:00 +0900 (bb0d9b2)
+++ lib/expr.c    2016-05-06 16:20:59 +0900 (36e8b41)
@@ -5911,7 +5911,32 @@ grn_table_select_index_equal(grn_ctx *ctx,
       }
     }
   } else {
+    const char *tag = "[equal]";
     grn_obj *domain = grn_ctx_at(ctx, index->header.domain);
+
+    if (domain) {
+      grn_bool optimizable = GRN_FALSE;
+
+      if (domain->header.domain == GRN_DB_SHORT_TEXT) {
+        grn_obj *normalizer = NULL;
+        grn_table_get_info(ctx, domain, NULL, NULL, NULL, &normalizer, NULL);
+        if (normalizer == grn_ctx_get(ctx, "NormalizerAuto", -1)) {
+          optimizable = GRN_TRUE;
+        }
+      } else {
+        optimizable = GRN_TRUE;
+      }
+      if (optimizable &&
+          grn_table_select_index_use_sequential_search(ctx,
+                                                       table,
+                                                       res,
+                                                       si->logical_op,
+                                                       tag,
+                                                       index)) {
+        domain = NULL;
+      }
+    }
+
     if (domain) {
       grn_id tid;
       if (GRN_OBJ_GET_DOMAIN(si->query) == DB_OBJ(domain)->id) {
@@ -5927,7 +5952,7 @@ grn_table_select_index_equal(grn_ctx *ctx,
         grn_ii *ii = (grn_ii *)index;
         grn_ii_cursor *ii_cursor;
 
-        grn_table_select_index_report(ctx, "[equal]", index);
+        grn_table_select_index_report(ctx, tag, index);
 
         sid = GRN_UINT32_VALUE_AT(&(si->wv), 0);
         weight = GRN_INT32_VALUE_AT(&(si->wv), 1);

  Added: test/command/suite/select/filter/index/equal/optimization/use_sequential_search/int32.expected (+151 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/index/equal/optimization/use_sequential_search/int32.expected    2016-05-06 16:20:59 +0900 (06daba9)
@@ -0,0 +1,151 @@
+table_create Users TABLE_HASH_KEY ShortText
+[[0,0.0,0.0],true]
+column_create Users age COLUMN_SCALAR Int32
+[[0,0.0,0.0],true]
+table_create Ages TABLE_PAT_KEY Int32
+[[0,0.0,0.0],true]
+column_create Ages users_age COLUMN_INDEX Users age
+[[0,0.0,0.0],true]
+load --table Users
+[
+{"_key": "user00", "age":  0},
+{"_key": "user01", "age":  1},
+{"_key": "user02", "age":  2},
+{"_key": "user03", "age":  3},
+{"_key": "user04", "age":  4},
+{"_key": "user05", "age":  5},
+{"_key": "user06", "age":  6},
+{"_key": "user07", "age":  7},
+{"_key": "user08", "age":  8},
+{"_key": "user09", "age":  9},
+{"_key": "user10", "age": 10},
+{"_key": "user11", "age": 11},
+{"_key": "user12", "age": 12},
+{"_key": "user13", "age": 13},
+{"_key": "user14", "age": 14},
+{"_key": "user15", "age": 15},
+{"_key": "user16", "age": 16},
+{"_key": "user17", "age": 17},
+{"_key": "user18", "age": 18},
+{"_key": "user19", "age": 19},
+{"_key": "user20", "age": 20},
+{"_key": "user21", "age": 21},
+{"_key": "user22", "age": 22},
+{"_key": "user23", "age": 23},
+{"_key": "user24", "age": 24},
+{"_key": "user25", "age": 25},
+{"_key": "user26", "age": 26},
+{"_key": "user27", "age": 27},
+{"_key": "user28", "age": 28},
+{"_key": "user29", "age": 29},
+{"_key": "user30", "age": 30},
+{"_key": "user31", "age": 31},
+{"_key": "user32", "age": 32},
+{"_key": "user33", "age": 33},
+{"_key": "user34", "age": 34},
+{"_key": "user35", "age": 35},
+{"_key": "user36", "age": 36},
+{"_key": "user37", "age": 37},
+{"_key": "user38", "age": 38},
+{"_key": "user39", "age": 39},
+{"_key": "user40", "age": 40},
+{"_key": "user41", "age": 41},
+{"_key": "user42", "age": 42},
+{"_key": "user43", "age": 43},
+{"_key": "user44", "age": 44},
+{"_key": "user45", "age": 45},
+{"_key": "user46", "age": 46},
+{"_key": "user47", "age": 47},
+{"_key": "user48", "age": 48},
+{"_key": "user49", "age": 49},
+{"_key": "user50", "age": 50},
+{"_key": "user51", "age": 51},
+{"_key": "user52", "age": 52},
+{"_key": "user53", "age": 53},
+{"_key": "user54", "age": 54},
+{"_key": "user55", "age": 55},
+{"_key": "user56", "age": 56},
+{"_key": "user57", "age": 57},
+{"_key": "user58", "age": 58},
+{"_key": "user59", "age": 59},
+{"_key": "user60", "age": 60},
+{"_key": "user61", "age": 61},
+{"_key": "user62", "age": 62},
+{"_key": "user63", "age": 63},
+{"_key": "user64", "age": 64},
+{"_key": "user65", "age": 65},
+{"_key": "user66", "age": 66},
+{"_key": "user67", "age": 67},
+{"_key": "user68", "age": 68},
+{"_key": "user69", "age": 69},
+{"_key": "user70", "age": 70},
+{"_key": "user71", "age": 71},
+{"_key": "user72", "age": 72},
+{"_key": "user73", "age": 73},
+{"_key": "user74", "age": 74},
+{"_key": "user75", "age": 75},
+{"_key": "user76", "age": 76},
+{"_key": "user77", "age": 77},
+{"_key": "user78", "age": 78},
+{"_key": "user79", "age": 79},
+{"_key": "user80", "age": 80},
+{"_key": "user81", "age": 81},
+{"_key": "user82", "age": 82},
+{"_key": "user83", "age": 83},
+{"_key": "user84", "age": 84},
+{"_key": "user85", "age": 85},
+{"_key": "user86", "age": 86},
+{"_key": "user87", "age": 87},
+{"_key": "user88", "age": 88},
+{"_key": "user89", "age": 89},
+{"_key": "user90", "age": 90},
+{"_key": "user91", "age": 91},
+{"_key": "user92", "age": 92},
+{"_key": "user93", "age": 93},
+{"_key": "user94", "age": 94},
+{"_key": "user95", "age": 95},
+{"_key": "user96", "age": 96},
+{"_key": "user97", "age": 97},
+{"_key": "user98", "age": 98},
+{"_key": "user99", "age": 99}
+]
+[[0,0.0,0.0],100]
+log_level --level info
+[[0,0.0,0.0],true]
+select Users --filter '_key @^ "user0" && age == 5'
+[
+  [
+    0,
+    0.0,
+    0.0
+  ],
+  [
+    [
+      [
+        1
+      ],
+      [
+        [
+          "_id",
+          "UInt32"
+        ],
+        [
+          "_key",
+          "ShortText"
+        ],
+        [
+          "age",
+          "Int32"
+        ]
+      ],
+      [
+        6,
+        "user05",
+        5
+      ]
+    ]
+  ]
+]
+#|i| [table][select][index-not-used][equal] <Ages.users_age>: enough filtered: 10.00%(10/100) < 11.00% && 10 <= 1000
+log_level --level notice
+[[0,0.0,0.0],true]

  Added: test/command/suite/select/filter/index/equal/optimization/use_sequential_search/int32.test (+117 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/index/equal/optimization/use_sequential_search/int32.test    2016-05-06 16:20:59 +0900 (9c3a2e4)
@@ -0,0 +1,117 @@
+#$GRN_TABLE_SELECT_ENOUGH_FILTERED_RATIO=0.11
+
+table_create Users TABLE_HASH_KEY ShortText
+column_create Users age COLUMN_SCALAR Int32
+
+table_create Ages TABLE_PAT_KEY Int32
+column_create Ages users_age COLUMN_INDEX Users age
+
+load --table Users
+[
+{"_key": "user00", "age":  0},
+{"_key": "user01", "age":  1},
+{"_key": "user02", "age":  2},
+{"_key": "user03", "age":  3},
+{"_key": "user04", "age":  4},
+{"_key": "user05", "age":  5},
+{"_key": "user06", "age":  6},
+{"_key": "user07", "age":  7},
+{"_key": "user08", "age":  8},
+{"_key": "user09", "age":  9},
+{"_key": "user10", "age": 10},
+{"_key": "user11", "age": 11},
+{"_key": "user12", "age": 12},
+{"_key": "user13", "age": 13},
+{"_key": "user14", "age": 14},
+{"_key": "user15", "age": 15},
+{"_key": "user16", "age": 16},
+{"_key": "user17", "age": 17},
+{"_key": "user18", "age": 18},
+{"_key": "user19", "age": 19},
+{"_key": "user20", "age": 20},
+{"_key": "user21", "age": 21},
+{"_key": "user22", "age": 22},
+{"_key": "user23", "age": 23},
+{"_key": "user24", "age": 24},
+{"_key": "user25", "age": 25},
+{"_key": "user26", "age": 26},
+{"_key": "user27", "age": 27},
+{"_key": "user28", "age": 28},
+{"_key": "user29", "age": 29},
+{"_key": "user30", "age": 30},
+{"_key": "user31", "age": 31},
+{"_key": "user32", "age": 32},
+{"_key": "user33", "age": 33},
+{"_key": "user34", "age": 34},
+{"_key": "user35", "age": 35},
+{"_key": "user36", "age": 36},
+{"_key": "user37", "age": 37},
+{"_key": "user38", "age": 38},
+{"_key": "user39", "age": 39},
+{"_key": "user40", "age": 40},
+{"_key": "user41", "age": 41},
+{"_key": "user42", "age": 42},
+{"_key": "user43", "age": 43},
+{"_key": "user44", "age": 44},
+{"_key": "user45", "age": 45},
+{"_key": "user46", "age": 46},
+{"_key": "user47", "age": 47},
+{"_key": "user48", "age": 48},
+{"_key": "user49", "age": 49},
+{"_key": "user50", "age": 50},
+{"_key": "user51", "age": 51},
+{"_key": "user52", "age": 52},
+{"_key": "user53", "age": 53},
+{"_key": "user54", "age": 54},
+{"_key": "user55", "age": 55},
+{"_key": "user56", "age": 56},
+{"_key": "user57", "age": 57},
+{"_key": "user58", "age": 58},
+{"_key": "user59", "age": 59},
+{"_key": "user60", "age": 60},
+{"_key": "user61", "age": 61},
+{"_key": "user62", "age": 62},
+{"_key": "user63", "age": 63},
+{"_key": "user64", "age": 64},
+{"_key": "user65", "age": 65},
+{"_key": "user66", "age": 66},
+{"_key": "user67", "age": 67},
+{"_key": "user68", "age": 68},
+{"_key": "user69", "age": 69},
+{"_key": "user70", "age": 70},
+{"_key": "user71", "age": 71},
+{"_key": "user72", "age": 72},
+{"_key": "user73", "age": 73},
+{"_key": "user74", "age": 74},
+{"_key": "user75", "age": 75},
+{"_key": "user76", "age": 76},
+{"_key": "user77", "age": 77},
+{"_key": "user78", "age": 78},
+{"_key": "user79", "age": 79},
+{"_key": "user80", "age": 80},
+{"_key": "user81", "age": 81},
+{"_key": "user82", "age": 82},
+{"_key": "user83", "age": 83},
+{"_key": "user84", "age": 84},
+{"_key": "user85", "age": 85},
+{"_key": "user86", "age": 86},
+{"_key": "user87", "age": 87},
+{"_key": "user88", "age": 88},
+{"_key": "user89", "age": 89},
+{"_key": "user90", "age": 90},
+{"_key": "user91", "age": 91},
+{"_key": "user92", "age": 92},
+{"_key": "user93", "age": 93},
+{"_key": "user94", "age": 94},
+{"_key": "user95", "age": 95},
+{"_key": "user96", "age": 96},
+{"_key": "user97", "age": 97},
+{"_key": "user98", "age": 98},
+{"_key": "user99", "age": 99}
+]
+
+log_level --level info
+#@add-important-log-levels info
+select Users --filter '_key @^ "user0" && age == 5'
+#@remove-important-log-levels info
+log_level --level notice

  Added: test/command/suite/select/filter/index/equal/optimization/use_sequential_search/short_text_no_normalizer.expected (+151 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/index/equal/optimization/use_sequential_search/short_text_no_normalizer.expected    2016-05-06 16:20:59 +0900 (a270010)
@@ -0,0 +1,151 @@
+table_create Users TABLE_HASH_KEY ShortText
+[[0,0.0,0.0],true]
+column_create Users name COLUMN_SCALAR ShortText
+[[0,0.0,0.0],true]
+table_create Names TABLE_PAT_KEY ShortText
+[[0,0.0,0.0],true]
+column_create Names users_name COLUMN_INDEX Users name
+[[0,0.0,0.0],true]
+load --table Users
+[
+{"_key": "user00", "name": "user00"},
+{"_key": "user01", "name": "user01"},
+{"_key": "user02", "name": "user02"},
+{"_key": "user03", "name": "user03"},
+{"_key": "user04", "name": "user04"},
+{"_key": "user05", "name": "user05"},
+{"_key": "user06", "name": "user06"},
+{"_key": "user07", "name": "user07"},
+{"_key": "user08", "name": "user08"},
+{"_key": "user09", "name": "user09"},
+{"_key": "user10", "name": "user10"},
+{"_key": "user11", "name": "user11"},
+{"_key": "user12", "name": "user12"},
+{"_key": "user13", "name": "user13"},
+{"_key": "user14", "name": "user14"},
+{"_key": "user15", "name": "user15"},
+{"_key": "user16", "name": "user16"},
+{"_key": "user17", "name": "user17"},
+{"_key": "user18", "name": "user18"},
+{"_key": "user19", "name": "user19"},
+{"_key": "user20", "name": "user20"},
+{"_key": "user21", "name": "user21"},
+{"_key": "user22", "name": "user22"},
+{"_key": "user23", "name": "user23"},
+{"_key": "user24", "name": "user24"},
+{"_key": "user25", "name": "user25"},
+{"_key": "user26", "name": "user26"},
+{"_key": "user27", "name": "user27"},
+{"_key": "user28", "name": "user28"},
+{"_key": "user29", "name": "user29"},
+{"_key": "user30", "name": "user30"},
+{"_key": "user31", "name": "user31"},
+{"_key": "user32", "name": "user32"},
+{"_key": "user33", "name": "user33"},
+{"_key": "user34", "name": "user34"},
+{"_key": "user35", "name": "user35"},
+{"_key": "user36", "name": "user36"},
+{"_key": "user37", "name": "user37"},
+{"_key": "user38", "name": "user38"},
+{"_key": "user39", "name": "user39"},
+{"_key": "user40", "name": "user40"},
+{"_key": "user41", "name": "user41"},
+{"_key": "user42", "name": "user42"},
+{"_key": "user43", "name": "user43"},
+{"_key": "user44", "name": "user44"},
+{"_key": "user45", "name": "user45"},
+{"_key": "user46", "name": "user46"},
+{"_key": "user47", "name": "user47"},
+{"_key": "user48", "name": "user48"},
+{"_key": "user49", "name": "user49"},
+{"_key": "user50", "name": "user50"},
+{"_key": "user51", "name": "user51"},
+{"_key": "user52", "name": "user52"},
+{"_key": "user53", "name": "user53"},
+{"_key": "user54", "name": "user54"},
+{"_key": "user55", "name": "user55"},
+{"_key": "user56", "name": "user56"},
+{"_key": "user57", "name": "user57"},
+{"_key": "user58", "name": "user58"},
+{"_key": "user59", "name": "user59"},
+{"_key": "user60", "name": "user60"},
+{"_key": "user61", "name": "user61"},
+{"_key": "user62", "name": "user62"},
+{"_key": "user63", "name": "user63"},
+{"_key": "user64", "name": "user64"},
+{"_key": "user65", "name": "user65"},
+{"_key": "user66", "name": "user66"},
+{"_key": "user67", "name": "user67"},
+{"_key": "user68", "name": "user68"},
+{"_key": "user69", "name": "user69"},
+{"_key": "user70", "name": "user70"},
+{"_key": "user71", "name": "user71"},
+{"_key": "user72", "name": "user72"},
+{"_key": "user73", "name": "user73"},
+{"_key": "user74", "name": "user74"},
+{"_key": "user75", "name": "user75"},
+{"_key": "user76", "name": "user76"},
+{"_key": "user77", "name": "user77"},
+{"_key": "user78", "name": "user78"},
+{"_key": "user79", "name": "user79"},
+{"_key": "user80", "name": "user80"},
+{"_key": "user81", "name": "user81"},
+{"_key": "user82", "name": "user82"},
+{"_key": "user83", "name": "user83"},
+{"_key": "user84", "name": "user84"},
+{"_key": "user85", "name": "user85"},
+{"_key": "user86", "name": "user86"},
+{"_key": "user87", "name": "user87"},
+{"_key": "user88", "name": "user88"},
+{"_key": "user89", "name": "user89"},
+{"_key": "user90", "name": "user90"},
+{"_key": "user91", "name": "user91"},
+{"_key": "user92", "name": "user92"},
+{"_key": "user93", "name": "user93"},
+{"_key": "user94", "name": "user94"},
+{"_key": "user95", "name": "user95"},
+{"_key": "user96", "name": "user96"},
+{"_key": "user97", "name": "user97"},
+{"_key": "user98", "name": "user98"},
+{"_key": "user99", "name": "user99"}
+]
+[[0,0.0,0.0],100]
+log_level --level info
+[[0,0.0,0.0],true]
+select Users --filter '_key @^ "user0" && name == "user05"'
+[
+  [
+    0,
+    0.0,
+    0.0
+  ],
+  [
+    [
+      [
+        1
+      ],
+      [
+        [
+          "_id",
+          "UInt32"
+        ],
+        [
+          "_key",
+          "ShortText"
+        ],
+        [
+          "name",
+          "ShortText"
+        ]
+      ],
+      [
+        6,
+        "user05",
+        "user05"
+      ]
+    ]
+  ]
+]
+#|i| [table][select][index][equal] <Names.users_name>
+log_level --level notice
+[[0,0.0,0.0],true]

  Added: test/command/suite/select/filter/index/equal/optimization/use_sequential_search/short_text_no_normalizer.test (+117 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/index/equal/optimization/use_sequential_search/short_text_no_normalizer.test    2016-05-06 16:20:59 +0900 (f570a1f)
@@ -0,0 +1,117 @@
+#$GRN_TABLE_SELECT_ENOUGH_FILTERED_RATIO=0.11
+
+table_create Users TABLE_HASH_KEY ShortText
+column_create Users name COLUMN_SCALAR ShortText
+
+table_create Names TABLE_PAT_KEY ShortText
+column_create Names users_name COLUMN_INDEX Users name
+
+load --table Users
+[
+{"_key": "user00", "name": "user00"},
+{"_key": "user01", "name": "user01"},
+{"_key": "user02", "name": "user02"},
+{"_key": "user03", "name": "user03"},
+{"_key": "user04", "name": "user04"},
+{"_key": "user05", "name": "user05"},
+{"_key": "user06", "name": "user06"},
+{"_key": "user07", "name": "user07"},
+{"_key": "user08", "name": "user08"},
+{"_key": "user09", "name": "user09"},
+{"_key": "user10", "name": "user10"},
+{"_key": "user11", "name": "user11"},
+{"_key": "user12", "name": "user12"},
+{"_key": "user13", "name": "user13"},
+{"_key": "user14", "name": "user14"},
+{"_key": "user15", "name": "user15"},
+{"_key": "user16", "name": "user16"},
+{"_key": "user17", "name": "user17"},
+{"_key": "user18", "name": "user18"},
+{"_key": "user19", "name": "user19"},
+{"_key": "user20", "name": "user20"},
+{"_key": "user21", "name": "user21"},
+{"_key": "user22", "name": "user22"},
+{"_key": "user23", "name": "user23"},
+{"_key": "user24", "name": "user24"},
+{"_key": "user25", "name": "user25"},
+{"_key": "user26", "name": "user26"},
+{"_key": "user27", "name": "user27"},
+{"_key": "user28", "name": "user28"},
+{"_key": "user29", "name": "user29"},
+{"_key": "user30", "name": "user30"},
+{"_key": "user31", "name": "user31"},
+{"_key": "user32", "name": "user32"},
+{"_key": "user33", "name": "user33"},
+{"_key": "user34", "name": "user34"},
+{"_key": "user35", "name": "user35"},
+{"_key": "user36", "name": "user36"},
+{"_key": "user37", "name": "user37"},
+{"_key": "user38", "name": "user38"},
+{"_key": "user39", "name": "user39"},
+{"_key": "user40", "name": "user40"},
+{"_key": "user41", "name": "user41"},
+{"_key": "user42", "name": "user42"},
+{"_key": "user43", "name": "user43"},
+{"_key": "user44", "name": "user44"},
+{"_key": "user45", "name": "user45"},
+{"_key": "user46", "name": "user46"},
+{"_key": "user47", "name": "user47"},
+{"_key": "user48", "name": "user48"},
+{"_key": "user49", "name": "user49"},
+{"_key": "user50", "name": "user50"},
+{"_key": "user51", "name": "user51"},
+{"_key": "user52", "name": "user52"},
+{"_key": "user53", "name": "user53"},
+{"_key": "user54", "name": "user54"},
+{"_key": "user55", "name": "user55"},
+{"_key": "user56", "name": "user56"},
+{"_key": "user57", "name": "user57"},
+{"_key": "user58", "name": "user58"},
+{"_key": "user59", "name": "user59"},
+{"_key": "user60", "name": "user60"},
+{"_key": "user61", "name": "user61"},
+{"_key": "user62", "name": "user62"},
+{"_key": "user63", "name": "user63"},
+{"_key": "user64", "name": "user64"},
+{"_key": "user65", "name": "user65"},
+{"_key": "user66", "name": "user66"},
+{"_key": "user67", "name": "user67"},
+{"_key": "user68", "name": "user68"},
+{"_key": "user69", "name": "user69"},
+{"_key": "user70", "name": "user70"},
+{"_key": "user71", "name": "user71"},
+{"_key": "user72", "name": "user72"},
+{"_key": "user73", "name": "user73"},
+{"_key": "user74", "name": "user74"},
+{"_key": "user75", "name": "user75"},
+{"_key": "user76", "name": "user76"},
+{"_key": "user77", "name": "user77"},
+{"_key": "user78", "name": "user78"},
+{"_key": "user79", "name": "user79"},
+{"_key": "user80", "name": "user80"},
+{"_key": "user81", "name": "user81"},
+{"_key": "user82", "name": "user82"},
+{"_key": "user83", "name": "user83"},
+{"_key": "user84", "name": "user84"},
+{"_key": "user85", "name": "user85"},
+{"_key": "user86", "name": "user86"},
+{"_key": "user87", "name": "user87"},
+{"_key": "user88", "name": "user88"},
+{"_key": "user89", "name": "user89"},
+{"_key": "user90", "name": "user90"},
+{"_key": "user91", "name": "user91"},
+{"_key": "user92", "name": "user92"},
+{"_key": "user93", "name": "user93"},
+{"_key": "user94", "name": "user94"},
+{"_key": "user95", "name": "user95"},
+{"_key": "user96", "name": "user96"},
+{"_key": "user97", "name": "user97"},
+{"_key": "user98", "name": "user98"},
+{"_key": "user99", "name": "user99"}
+]
+
+log_level --level info
+#@add-important-log-levels info
+select Users --filter '_key @^ "user0" && name == "user05"'
+#@remove-important-log-levels info
+log_level --level notice

  Added: test/command/suite/select/filter/index/equal/optimization/use_sequential_search/short_text_normalizer_auto.expected (+151 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/index/equal/optimization/use_sequential_search/short_text_normalizer_auto.expected    2016-05-06 16:20:59 +0900 (8f0f4c4)
@@ -0,0 +1,151 @@
+table_create Users TABLE_HASH_KEY ShortText
+[[0,0.0,0.0],true]
+column_create Users name COLUMN_SCALAR ShortText
+[[0,0.0,0.0],true]
+table_create Names TABLE_PAT_KEY ShortText --normalizer NormalizerAuto
+[[0,0.0,0.0],true]
+column_create Names users_name COLUMN_INDEX Users name
+[[0,0.0,0.0],true]
+load --table Users
+[
+{"_key": "user00", "name": "user00"},
+{"_key": "user01", "name": "user01"},
+{"_key": "user02", "name": "user02"},
+{"_key": "user03", "name": "user03"},
+{"_key": "user04", "name": "user04"},
+{"_key": "user05", "name": "user05"},
+{"_key": "user06", "name": "user06"},
+{"_key": "user07", "name": "user07"},
+{"_key": "user08", "name": "user08"},
+{"_key": "user09", "name": "user09"},
+{"_key": "user10", "name": "user10"},
+{"_key": "user11", "name": "user11"},
+{"_key": "user12", "name": "user12"},
+{"_key": "user13", "name": "user13"},
+{"_key": "user14", "name": "user14"},
+{"_key": "user15", "name": "user15"},
+{"_key": "user16", "name": "user16"},
+{"_key": "user17", "name": "user17"},
+{"_key": "user18", "name": "user18"},
+{"_key": "user19", "name": "user19"},
+{"_key": "user20", "name": "user20"},
+{"_key": "user21", "name": "user21"},
+{"_key": "user22", "name": "user22"},
+{"_key": "user23", "name": "user23"},
+{"_key": "user24", "name": "user24"},
+{"_key": "user25", "name": "user25"},
+{"_key": "user26", "name": "user26"},
+{"_key": "user27", "name": "user27"},
+{"_key": "user28", "name": "user28"},
+{"_key": "user29", "name": "user29"},
+{"_key": "user30", "name": "user30"},
+{"_key": "user31", "name": "user31"},
+{"_key": "user32", "name": "user32"},
+{"_key": "user33", "name": "user33"},
+{"_key": "user34", "name": "user34"},
+{"_key": "user35", "name": "user35"},
+{"_key": "user36", "name": "user36"},
+{"_key": "user37", "name": "user37"},
+{"_key": "user38", "name": "user38"},
+{"_key": "user39", "name": "user39"},
+{"_key": "user40", "name": "user40"},
+{"_key": "user41", "name": "user41"},
+{"_key": "user42", "name": "user42"},
+{"_key": "user43", "name": "user43"},
+{"_key": "user44", "name": "user44"},
+{"_key": "user45", "name": "user45"},
+{"_key": "user46", "name": "user46"},
+{"_key": "user47", "name": "user47"},
+{"_key": "user48", "name": "user48"},
+{"_key": "user49", "name": "user49"},
+{"_key": "user50", "name": "user50"},
+{"_key": "user51", "name": "user51"},
+{"_key": "user52", "name": "user52"},
+{"_key": "user53", "name": "user53"},
+{"_key": "user54", "name": "user54"},
+{"_key": "user55", "name": "user55"},
+{"_key": "user56", "name": "user56"},
+{"_key": "user57", "name": "user57"},
+{"_key": "user58", "name": "user58"},
+{"_key": "user59", "name": "user59"},
+{"_key": "user60", "name": "user60"},
+{"_key": "user61", "name": "user61"},
+{"_key": "user62", "name": "user62"},
+{"_key": "user63", "name": "user63"},
+{"_key": "user64", "name": "user64"},
+{"_key": "user65", "name": "user65"},
+{"_key": "user66", "name": "user66"},
+{"_key": "user67", "name": "user67"},
+{"_key": "user68", "name": "user68"},
+{"_key": "user69", "name": "user69"},
+{"_key": "user70", "name": "user70"},
+{"_key": "user71", "name": "user71"},
+{"_key": "user72", "name": "user72"},
+{"_key": "user73", "name": "user73"},
+{"_key": "user74", "name": "user74"},
+{"_key": "user75", "name": "user75"},
+{"_key": "user76", "name": "user76"},
+{"_key": "user77", "name": "user77"},
+{"_key": "user78", "name": "user78"},
+{"_key": "user79", "name": "user79"},
+{"_key": "user80", "name": "user80"},
+{"_key": "user81", "name": "user81"},
+{"_key": "user82", "name": "user82"},
+{"_key": "user83", "name": "user83"},
+{"_key": "user84", "name": "user84"},
+{"_key": "user85", "name": "user85"},
+{"_key": "user86", "name": "user86"},
+{"_key": "user87", "name": "user87"},
+{"_key": "user88", "name": "user88"},
+{"_key": "user89", "name": "user89"},
+{"_key": "user90", "name": "user90"},
+{"_key": "user91", "name": "user91"},
+{"_key": "user92", "name": "user92"},
+{"_key": "user93", "name": "user93"},
+{"_key": "user94", "name": "user94"},
+{"_key": "user95", "name": "user95"},
+{"_key": "user96", "name": "user96"},
+{"_key": "user97", "name": "user97"},
+{"_key": "user98", "name": "user98"},
+{"_key": "user99", "name": "user99"}
+]
+[[0,0.0,0.0],100]
+log_level --level info
+[[0,0.0,0.0],true]
+select Users --filter '_key @^ "user0" && name == "user05"'
+[
+  [
+    0,
+    0.0,
+    0.0
+  ],
+  [
+    [
+      [
+        1
+      ],
+      [
+        [
+          "_id",
+          "UInt32"
+        ],
+        [
+          "_key",
+          "ShortText"
+        ],
+        [
+          "name",
+          "ShortText"
+        ]
+      ],
+      [
+        6,
+        "user05",
+        "user05"
+      ]
+    ]
+  ]
+]
+#|i| [table][select][index-not-used][equal] <Names.users_name>: enough filtered: 10.00%(10/100) < 11.00% && 10 <= 1000
+log_level --level notice
+[[0,0.0,0.0],true]

  Added: test/command/suite/select/filter/index/equal/optimization/use_sequential_search/short_text_normalizer_auto.test (+117 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/index/equal/optimization/use_sequential_search/short_text_normalizer_auto.test    2016-05-06 16:20:59 +0900 (080b4f8)
@@ -0,0 +1,117 @@
+#$GRN_TABLE_SELECT_ENOUGH_FILTERED_RATIO=0.11
+
+table_create Users TABLE_HASH_KEY ShortText
+column_create Users name COLUMN_SCALAR ShortText
+
+table_create Names TABLE_PAT_KEY ShortText --normalizer NormalizerAuto
+column_create Names users_name COLUMN_INDEX Users name
+
+load --table Users
+[
+{"_key": "user00", "name": "user00"},
+{"_key": "user01", "name": "user01"},
+{"_key": "user02", "name": "user02"},
+{"_key": "user03", "name": "user03"},
+{"_key": "user04", "name": "user04"},
+{"_key": "user05", "name": "user05"},
+{"_key": "user06", "name": "user06"},
+{"_key": "user07", "name": "user07"},
+{"_key": "user08", "name": "user08"},
+{"_key": "user09", "name": "user09"},
+{"_key": "user10", "name": "user10"},
+{"_key": "user11", "name": "user11"},
+{"_key": "user12", "name": "user12"},
+{"_key": "user13", "name": "user13"},
+{"_key": "user14", "name": "user14"},
+{"_key": "user15", "name": "user15"},
+{"_key": "user16", "name": "user16"},
+{"_key": "user17", "name": "user17"},
+{"_key": "user18", "name": "user18"},
+{"_key": "user19", "name": "user19"},
+{"_key": "user20", "name": "user20"},
+{"_key": "user21", "name": "user21"},
+{"_key": "user22", "name": "user22"},
+{"_key": "user23", "name": "user23"},
+{"_key": "user24", "name": "user24"},
+{"_key": "user25", "name": "user25"},
+{"_key": "user26", "name": "user26"},
+{"_key": "user27", "name": "user27"},
+{"_key": "user28", "name": "user28"},
+{"_key": "user29", "name": "user29"},
+{"_key": "user30", "name": "user30"},
+{"_key": "user31", "name": "user31"},
+{"_key": "user32", "name": "user32"},
+{"_key": "user33", "name": "user33"},
+{"_key": "user34", "name": "user34"},
+{"_key": "user35", "name": "user35"},
+{"_key": "user36", "name": "user36"},
+{"_key": "user37", "name": "user37"},
+{"_key": "user38", "name": "user38"},
+{"_key": "user39", "name": "user39"},
+{"_key": "user40", "name": "user40"},
+{"_key": "user41", "name": "user41"},
+{"_key": "user42", "name": "user42"},
+{"_key": "user43", "name": "user43"},
+{"_key": "user44", "name": "user44"},
+{"_key": "user45", "name": "user45"},
+{"_key": "user46", "name": "user46"},
+{"_key": "user47", "name": "user47"},
+{"_key": "user48", "name": "user48"},
+{"_key": "user49", "name": "user49"},
+{"_key": "user50", "name": "user50"},
+{"_key": "user51", "name": "user51"},
+{"_key": "user52", "name": "user52"},
+{"_key": "user53", "name": "user53"},
+{"_key": "user54", "name": "user54"},
+{"_key": "user55", "name": "user55"},
+{"_key": "user56", "name": "user56"},
+{"_key": "user57", "name": "user57"},
+{"_key": "user58", "name": "user58"},
+{"_key": "user59", "name": "user59"},
+{"_key": "user60", "name": "user60"},
+{"_key": "user61", "name": "user61"},
+{"_key": "user62", "name": "user62"},
+{"_key": "user63", "name": "user63"},
+{"_key": "user64", "name": "user64"},
+{"_key": "user65", "name": "user65"},
+{"_key": "user66", "name": "user66"},
+{"_key": "user67", "name": "user67"},
+{"_key": "user68", "name": "user68"},
+{"_key": "user69", "name": "user69"},
+{"_key": "user70", "name": "user70"},
+{"_key": "user71", "name": "user71"},
+{"_key": "user72", "name": "user72"},
+{"_key": "user73", "name": "user73"},
+{"_key": "user74", "name": "user74"},
+{"_key": "user75", "name": "user75"},
+{"_key": "user76", "name": "user76"},
+{"_key": "user77", "name": "user77"},
+{"_key": "user78", "name": "user78"},
+{"_key": "user79", "name": "user79"},
+{"_key": "user80", "name": "user80"},
+{"_key": "user81", "name": "user81"},
+{"_key": "user82", "name": "user82"},
+{"_key": "user83", "name": "user83"},
+{"_key": "user84", "name": "user84"},
+{"_key": "user85", "name": "user85"},
+{"_key": "user86", "name": "user86"},
+{"_key": "user87", "name": "user87"},
+{"_key": "user88", "name": "user88"},
+{"_key": "user89", "name": "user89"},
+{"_key": "user90", "name": "user90"},
+{"_key": "user91", "name": "user91"},
+{"_key": "user92", "name": "user92"},
+{"_key": "user93", "name": "user93"},
+{"_key": "user94", "name": "user94"},
+{"_key": "user95", "name": "user95"},
+{"_key": "user96", "name": "user96"},
+{"_key": "user97", "name": "user97"},
+{"_key": "user98", "name": "user98"},
+{"_key": "user99", "name": "user99"}
+]
+
+log_level --level info
+#@add-important-log-levels info
+select Users --filter '_key @^ "user0" && name == "user05"'
+#@remove-important-log-levels info
+log_level --level notice
-------------- next part --------------
HTML����������������������������...
下載 



More information about the Groonga-commit mailing list
Back to archive index