有没有办法在不锁定数据库的情况下为postgres表添加索引?

时间:2015-06-02 13:57:03

标签: postgresql indexing

我有一个包含3列的postgres表,这些列有400万行并且正在增长。当我创建表时,我打算在其中一列上创建一个btree索引,但我忘了这样做。我现在可以使用CREATE INDEX命令创建索引,但我认为这将锁定数据库。由于我每秒都有数据,我想避免这种情况。我注意到有一个名为CONCURRENTLY的选项。那是我应该用的吗?它有任何其他我应该注意的效果吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

是的,您可以使用<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:background="@drawable/blue3" tools:context=".MainActivity"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="My Tasks" android:id="@+id/mytasks_btn" android:onClick="mytask" style="@style/btnStyleBeige" android:layout_alignParentTop="true" android:layout_alignParentStart="true" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Add Task" android:id="@+id/addtask_btn" android:layout_marginTop="65dp" style="@style/btnStyleBeige" android:onClick="addtask" android:layout_below="@+id/mytasks_btn" android:layout_centerHorizontal="true" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Show Current Location" android:id="@+id/shw_loc_btn" style="@style/btnStyleBeige" android:onClick="shwlocn" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:layout_alignParentEnd="true" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Search Nearby" android:id="@+id/button4" android:onClick="searchnear" style="@style/btnStyleBeige" android:layout_below="@+id/shw_loc_btn" android:layout_alignParentStart="true" android:layout_marginTop="67dp" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" style="@style/btnStyleBeige" android:text="Location Distance" android:id="@+id/button7" android:onClick="locdis" android:layout_alignParentBottom="true" android:layout_alignParentStart="true" />

然而 caveats apply:你必须看看自己,是否成功,并可能重新尝试。

答案 1 :(得分:1)

CONCURRENTLY将允许您的表在索引构建时继续使用。性能影响难以预测,并且会根据表中的负载和索引的大小而有所不同。

每当我们必须为永远在线的生产数据库添加索引时,我们选择与客户安排停机时间,而不是冒着使用在线索引功能的风险,因为它不太可预测,并且可能因不同的原因导致中断