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����������������������������...下载