why is index not used?

Поиск
Список
Период
Сортировка
От Marcin Krol
Тема why is index not used?
Дата
Msg-id 49073081.3050604@gmail.com
обсуждение исходный текст
Ответы Re: why is index not used?  ("Sean Davis" <sdavis2@mail.nih.gov>)
Re: why is index not used?  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-novice
Hello,

I'm obviously new to Postgresql. Problem: I created simple table 'auth'
(with following code in Python) and also created an index, but when I
run a query, EXPLAIN ANALYZE says that sequential scan is done instead
of using an index.

Details:


import psycopg2

conn = psycopg2.connect("dbname=booktown user=postgres")
curs = conn.cursor()

curs.execute("""create table auth(first_name varchar(12), last_name
varchar(20), v1 float, v2 float, v3 int, v4 int, v5 varchar(50))""")

for x in range(97,97+26):
     print chr(x)
     for y in range(1,100000):
         s="INSERT INTO auth VALUES ('%c%d" % (chr(x), y) + "', " +
"'%c%d'," % (chr(x), y) + "%d, %d, %d, %d, '%c%d')" % (y,y,y,y,chr(x),y)
         #print s
         curs.execute(s)

conn.commit()




SQL creation code for table:

create table auth(first_name varchar(12), last_name varchar(20), v1
float, v2 float, v3 int, v4 int, v5 varchar(50))

The Python code above fills first_name and last_name columns with values
like 'a1...'.

I also created index:

booktown=# create index first_name_idx on auth(first_name);

But now, when I do a select on that table, it does sequential scan
instead of using an index:

booktown=# explain analyze select * from auth where first_name like 'a11%';
                                                QUERY PLAN
--------------------------------------------------------------------------------------------------------
  Seq Scan on auth  (cost=0.00..56796.68 rows=1 width=42) (actual
time=0.091..983.665 rows=1111 loops=1)
    Filter: ((first_name)::text ~~ 'a11%'::text)
  Total runtime: 986.314 ms
(3 rows)

FAQ says that in order to use index, LIKE statements cannot begin with
%, so I should be fine?

Is there a way to make PostgreSQL use an index? Or is there smth I'm
missing before PGSQL uses an index to run this query?


Regards,
Marcin


В списке pgsql-novice по дате отправления:

Предыдущее
От: Bruce Hyatt
Дата:
Сообщение: Re: combining tables
Следующее
От: "Sean Davis"
Дата:
Сообщение: Re: why is index not used?