接着创建random_text_simple(length int4)函数,此函数会调用random_range(int4, int4)函数。
- CREATE OR REPLACE FUNCTION random_text_simple(length int4)
- RETURNS text
- LANGUAGE PLPGSQL
- AS $$
- DECLARE
- possible_chars text := '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
- output text := '';
- i int4;
- pos int4;
- BEGIN
- FOR i IN 1..length LOOP
- pos := random_range(1, length(possible_chars));
- output := output || substr(possible_chars, pos, 1);
- END LOOP;
- RETURN output;
- END;
- $$;
random_text_simple(length int4)函数可以随机生成指定长度字符串,如下随机生成含三位字符的字符串:
- mydb=> SELECT random_text_simple(3);
- random_text_simple
- --------------------
- LL9
- (1 row)
随机生成含六位字符的字符串,如下所示:
- mydb=> SELECT random_text_simple(6);
- B81BPW
- (1 row)
后面会用到这个函数生成测试数据。
创建JSON测试表
创建user_ini测试表,并通过random_text_simple(length int4)函数插入100万随机生成六位字符的字符串测试数据,如下所示:
- mydb=> CREATE TABLE user_ini(id int4 ,user_id int8,
- user_name character varying(64),
- create_time timestamp(6) with time zone default clock_timestamp);
- SELECT r,round(random*1000000), random_text_simple(6)
- FROM generate_series(1,1000000) as r;
- INSERT 0 1000000
创建tbl_user_search_json表,并通过row_to_json函数将表user_ini行数据转换成json数据,如下所示:
- mydb=> CREATE TABLE tbl_user_search_json(id serial, user_info json);
- CREATE TABLE
- mydb=> INSERT INTO tbl_user_search_json(user_info)
- SELECT row_to_json(user_ini) FROM user_ini;
- INSERT 0 1000000
生成的数据如下:
- mydb=> SELECT * FROM tbl_user_search_json LIMIT 1;
- id | user_info
- ----+-----------------------------------------------------------------------------------------------
- 1 | {"id":1,"user_id":186536,"user_name":"KTU89H","create_time":"2017-08-05T15:59:25.359148+08:00"}
- (1 row)
JSON数据全文检索测试
使用全文检索查询表tbl_user_search_json的user_info字段中包含KTU89H字符的记录,如下所示:
- mydb=> SELECT * FROM tbl_user_search_json
- WHERE to_tsvector('english',user_info) @@ to_tsquery('ENGLISH','KTU89H');
- id | user_info
- ----+----------------------------------------------------------------------------------------
以上SQL能正常执行说明全文检索支持json数据类型,只是上述SQL走了全表扫描性能低,执行时间为8061毫秒,如下所示:
- mydb=> EXPLAIN ANALYZE SELECT * FROM tbl_user_search_json
- -----------------------------------------------------------------------------------
- Seq Scan on tbl_user_search_json (cost=0.00..279513.00 rows=5000 width=104) (actual time=0.046..8061.858 rows=1 loops=1)
- Filter: (to_tsvector('english'::regconfig, user_info) @@ '''ktu89h'''::tsquery)
- Rows Removed by Filter: 999999
- Planning time: 0.091 ms
- Execution time: 8061.880 ms
- (5 rows)
(编辑:好传媒网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|