explain analyze
select * from azjunk7n where txt ~ 'ba'; -- '~' means: consider regex
+index
QUERY PLAN
+
----------------------------------------------------------------------
+-----------------------------------------------
Seq Scan on azjunk7n (cost=0.00..267879.16 rows=707066 width=85) (ac
+tual time=5.413..9163.252 rows=897633 loops=1)
Filter: (txt ~ 'ba'::text)
Rows Removed by Filter: 9102367
Planning Time: 0.360 ms
Execution Time: 9189.173 ms
(5 rows)
Time: 9190.029 ms (00:09.190)
Nine seconds. Because, of course, if there are too many hits (here: 897633), the system switches to SeqScan - after all, a sequential scan is the fastest way to access many rows. Faster would've been: where position('ba' in txt) > 0 which would SeqScan in 3 seconds; but position() doesn't allow regexen.
|