@@ -80,7 +80,7 @@ create table train_order (
8080);
8181
8282-- 索引,提高按坐席查询的效率
83- create index idx_train_order_1 on train_order (train_id, box_id);
83+ create index idx_train_order_1 on train_order (train_id, box_id, site_id );
8484```
8585
8686冗余一份数据,按用户哈希分区,提高按用户查询的效率。
@@ -201,30 +201,28 @@ Time: 0.367 ms
2012017、schemaless设计来了,按坐席和乘车日期查询,平均返回10条记录。
202202
203203```
204- create or replace function get_site_order(v_get_on date, v_train_id int, v_box_id int2) returns setof train_order as $$
204+ create or replace function get_site_order(v_get_on date, v_train_id int, v_box_id int2, v_site_id int2 ) returns setof train_order as $$
205205declare
206206 tbl name := 'train_order_'||to_char(v_get_on,'yyyymmdd');
207207begin
208- return query execute format('select * from %I where train_id=%L and box_id=%L', tbl, v_train_id, v_box_id);
208+ return query execute format('select * from %I where train_id=%L and box_id=%L and site_id=%L ', tbl, v_train_id, v_box_id, v_site_id );
209209end;
210210$$ language plpgsql strict;
211211```
212212
213213```
214- postgres=# select (get_site_order('2017-10-09', 1999, 3::int2)).* ;
215- id | train_id | box_id | site_id | station_1 | station_2 | get_on | uid | pay_stat | charge | weight | window_id | crt_time | mod_time
216- ------------+----------+--------+---------+-----------+-----------+------------+-----------+----------+------------------+--------+-----------+----------------------------+----------
217- 2402454347 | 1999 | 3 | 108 | 58 | 19 | 2017-10-09 | 933443835 | 1 | 1908.97158834804 | 1 | 1 | 2017-09-27 21:15:26.796659 |
218- 2399727138 | 1999 | 3 | 172 | 87 | 32 | 2017-10-09 | 77002396 | 1 | 8196.2648357721 | 1 | 1 | 2017-09-27 21:14:52.838442 |
219- 2390398889 | 1999 | 3 | 160 | 40 | 20 | 2017-10-09 | 83057290 | 1 | 7491.21171126422 | 1 | 1 | 2017-09-27 21:13:38.190615 |
220- 2388491328 | 1999 | 3 | 196 | 10 | 51 | 2017-10-09 | 733877428 | 1 | 5778.93740894599 | 1 | 1 | 2017-09-27 21:13:22.721515 |
221- 2383766403 | 1999 | 3 | 97 | 32 | 7 | 2017-10-09 | 542053851 | 1 | 2010.56065606233 | 1 | 1 | 2017-09-27 21:12:44.861967 |
222- 2382764531 | 1999 | 3 | 57 | 65 | 12 | 2017-10-09 | 730620343 | 1 | 9508.43552351324 | 1 | 1 | 2017-09-27 21:12:36.790158 |
223- 2381508614 | 1999 | 3 | 78 | 9 | 76 | 2017-10-09 | 553050023 | 1 | 4190.36140979407 | 1 | 1 | 2017-09-27 21:12:26.79828 |
224- 2380100816 | 1999 | 3 | 6 | 63 | 16 | 2017-10-09 | 295268263 | 1 | 6046.77832423523 | 1 | 1 | 2017-09-27 21:12:15.669973 |
225- 2379584703 | 1999 | 3 | 111 | 65 | 89 | 2017-10-09 | 703032018 | 1 | 2217.88949064212 | 1 | 1 | 2017-09-27 21:12:11.534523 |
226- 2378676040 | 1999 | 3 | 140 | 87 | 42 | 2017-10-09 | 762174690 | 1 | 8776.38305891259 | 1 | 1 | 2017-09-27 21:12:03.98851 |
227- (10 rows)
214+ postgres=# select (get_site_order('2017-10-09', 1999, 3::int2, 1::int2)).* ;
215+ id | train_id | box_id | site_id | station_1 | station_2 | get_on | uid | pay_stat | charge | weight | window_id | crt_time | mod_time
216+ ------------+----------+--------+---------+-----------+-----------+------------+-----------+----------+------------------+--------+-----------+----------------------------+----------
217+ 2300300781 | 1999 | 3 | 1 | 68 | 14 | 2017-10-09 | 419271707 | 1 | 7061.5369010889 | 1 | 1 | 2017-09-27 20:54:56.710393 |
218+ 2234878940 | 1999 | 3 | 1 | 85 | 45 | 2017-10-09 | 885259649 | 1 | 5214.0475622518 | 1 | 1 | 2017-09-27 20:41:22.906565 |
219+ 2107427991 | 1999 | 3 | 1 | 35 | 98 | 2017-10-09 | 985856266 | 1 | 8642.02400384098 | 1 | 1 | 2017-09-27 20:12:33.85781 |
220+ 1794488978 | 1999 | 3 | 1 | 94 | 20 | 2017-10-09 | 351055777 | 1 | 1718.21027540183 | 1 | 1 | 2017-09-27 19:06:43.643281 |
221+ 1374974043 | 1999 | 3 | 1 | 16 | 26 | 2017-10-09 | 923638283 | 1 | 4711.63916029176 | 1 | 1 | 2017-09-27 17:33:47.147368 |
222+ 1351805341 | 1999 | 3 | 1 | 85 | 74 | 2017-10-09 | 212355965 | 1 | 4541.93220470985 | 1 | 1 | 2017-09-27 17:28:20.974681 |
223+ 1182159676 | 1999 | 3 | 1 | 15 | 31 | 2017-10-09 | 567906740 | 1 | 8566.17715372145 | 1 | 1 | 2017-09-27 16:54:26.478221 |
224+ 35506838 | 1999 | 3 | 1 | 1 | 47 | 2017-10-09 | 884099213 | 1 | 983.503066563047 | 1 | 1 | 2017-09-27 13:55:21.280078 |
225+ (8 rows)
228226
229227Time: 0.391 ms
230228```
@@ -333,8 +331,9 @@ script statistics:
333331vi test2.sql
334332
335333\set train_id random(0,19999)
334+ \set box_id random(0,19)
336335\set site_id random(0,199)
337- select * from get_site_order(current_date+(random()*30)::int, (:train_id)::int, (:site_id)::int2);
336+ select * from get_site_order(current_date+(random()*30)::int, (:train_id)::int, (:box_id)::int2, (: site_id)::int2);
338337
339338pgbench -M prepared -n -r -P 1 -f ./test2.sql -c 64 -j 64 -T 120
340339```
@@ -354,8 +353,9 @@ tps = 213763.615290 (excluding connections establishing)
354353script statistics:
355354 - statement latencies in milliseconds:
356355 0.002 \set train_id random(0,19999)
356+ 0.000 \set box_id random(0,19)
357357 0.000 \set site_id random(0,199)
358- 0.302 select * from get_site_order(current_date+(random()*30)::int, (:train_id)::int, (:site_id)::int2);
358+ 0.302 select * from get_site_order(current_date+(random()*30)::int, (:train_id)::int, (:box_id)::int2, (: site_id)::int2);
359359```
360360
361361## 小结
0 commit comments