我有一個Postgre數據庫和一個名爲my_table的表。該表中有4列(id
,column1
,column2
,column3
)。 id
列是主鍵,列上沒有其他約束或索引。 該表有大約200000行。Postgre數據庫忽略創建的索引?
我想打印出列column2
的值與'value12'
相等(不區分大小寫)的所有行。我用這個:
SELECT * FROM my_table WHERE column2 = lower('value12')
下面是該語句的執行計劃(的set enable_seqscan=on; EXPLAIN SELECT * FROM my_table WHERE column2 = lower('value12')
結果):
Seq Scan on my_table (cost=0.00..4676.00 rows=10000 width=55)
Filter: ((column2)::text = 'value12'::text)
我認爲這是慢,所以我創建column2
列的索引更好prerformance搜索:
CREATE INDEX my_index ON my_table (lower(column2))
現在我跑了相同的選擇:
SELECT * FROM my_table WHERE column2 = lower('value12')
我希望它更快,因爲它可以使用索引。但是速度並不快,與以前一樣緩慢。所以我檢查執行計劃,它和以前一樣(參見上文)。所以它仍然使用順序的情況,它忽略了索引!哪裏有問題 ?