簡體   English   中英

一張表處理超過1000萬行(PostgreSQL)

[英]Handle >10 million rows for one table (postgresql)

我從geonames.org導入了1100萬個位置名稱到我的postgresql中。 但是,當我嘗試僅在TablePlus中查看實例數據時,它的運行速度非常慢。 對一行執行簡單的選擇大約需要2分鍾。 我該如何處理大數據,以免它變得太慢而我卻可以很快地選擇它?

我認為我沒有任何索引,會有所作為嗎?

這是我的桌子:

create table geoname (
    geonameid   int,
    name varchar(200),
    asciiname varchar(200),
    alternatenames text,
    latitude float,
    longitude float,
    fclass char(1),
    fcode varchar(10),
    country varchar(2),
    cc2 varchar(120),
    admin1 varchar(20),
    admin2 varchar(80),
    admin3 varchar(20),
    admin4 varchar(20),
    population bigint,
    elevation int,
    gtopo30 int,
    timezone varchar(40),
    moddate date
 );

您需要指定查詢的外觀。

索引肯定會有所作為。 但是索引的類型取決於您使用的查詢以及用於選擇一個或多個行的列。

首先定義表上的主鍵。 大概geonameid是主鍵。 你可以這樣做:

alter table geonames add constraint pk_geonames_geonameid primary key (geonameid);

創建表時,您應該真正做到這一點,但是總比沒有好。

如果您通過geonameid搜索,那么您會發現速度顯着提高。

如果asciiname其他列搜索,例如nameasciiname ,則為這些列添加索引:

create index idx_geonames_name on geonames(name);
create index idx_geonames_asciiname on geonames(aciiname);

這不適用於所有搜索。 如果您的條件like通配符,則可能需要其他索引策略。 同樣,如果按latitudelongitude ,則需要GIS索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM