SQLite學習手冊 索引和資料分析 清理

2022-04-08 23:58:02 字數 2375 閱讀 3731

一、建立索引:

在sqlite中,建立索引的sql語法和其他大多數關係型資料庫基本相同,因為這裡也僅僅是給出示例用法:

sqlite> create table testtable (first_col integer,second_col integer);

--建立最簡單的索引,該索引基於某個表的乙個字段。

sqlite> create index testtable_idx on testtable(first_col);

--建立聯合索引,該索引基於某個表的多個字段,同時可以指定每個欄位的排序規則(公升序/降序)。

sqlite> create index testtable_idx2 on testtable(first_col asc,second_col desc);

--建立唯一性索引,該索引規則和資料表的唯一性約束的規則相同,即null和任何值都不同,包括null本身。

sqlite> create unique index testtable_idx3 on testtable(second_col desc);

sqlite> .indices testtable

testtable_idx

testtable_idx2   

testtable_idx3

從.indices命令的輸出可以看出,三個索引均已成功建立。

二、刪除索引:

索引的刪除和檢視的刪除非常相似,含義也是如此,因此這裡也只是給出示例:   

sqlite> drop index testtable_idx;

--如果刪除不存在的索引將會導致操作失敗,如果在不確定的情況下又不希望錯誤被丟擲,可以使用"if exists"從句。

sqlite> drop index testtable_idx;

error: no such index: testtable_idx

sqlite> drop index if exists testtable_idx;

三、重建索引:

重建索引用於刪除已經存在的索引,同時基於其原有的規則重建該索引。這裡需要說明的是,如果在reindex語句後面沒有給出資料庫名,那麼當前連線下所有attached資料庫中所有索引都會被重建。如果指定了資料庫名和表名,那麼該表中的所有索引都會被重建,如果只是指定索引名,那麼當前資料庫的指定索引被重建。

--當前連線attached所有資料庫中的索引都被重建。

sqlite> reindex;

--重建當前主資料庫中testtable表的所有索引。

sqlite> reindex testtable;

--重建當前主資料庫中名稱為testtable_idx2的索引。

sqlite> reindex testtable_idx2;

四、資料分析:

和postgresql非常相似,sqlite中的analyze命令也同樣用於分析資料表和索引中的資料,並將統計結果存放於sqlite的內部系統表中,以便於查詢優化器可以根據分析後的統計資料選擇最優的查詢執行路徑,從而提高整個查詢的效率。見如下示例:

--如果在analyze命令之後沒有指定任何引數,則分析當前連線中所有attached資料庫中的表和索引。

sqlite> analyze;

--如果指定資料庫作為analyze的引數,那麼該資料庫下的所有表和索引都將被分析並生成統計資料。

sqlite> analyze main;

--如果指定了資料庫中的某個表或索引為analyze的引數,那麼該錶和其所有關聯的索引都將被分析。

sqlite> analyze main.testtable;

sqlite> analyze main.testtable_idx2;

五、資料清理:

和postgresql中的vacuum命令相比,他們的功能以及實現方式非常相似,不同的是postgresql提供了更細的粒度,而sqlite只能將該命令作用於資料庫,無法再精確到資料庫中指定的資料表或者索引,然而這一點恰恰是postgresql可以做到的。

當某個資料庫中的乙個或多個資料表存在大量的插入、更新和刪除等操作時,將會有大量的磁碟空間被已刪除的資料所占用,在沒有執行vacuum命令之前,sqlite並沒有將它們歸還於作業系統。由於該類資料表中的資料儲存非常分散,因此在查詢時,無法得到更好的批量io讀取效果,從而影響了查詢效率。

在sqlite中,僅支援清理當前連線中的主資料庫,而不能清理其它attached資料庫。vacuum命令在完成資料清理時採用了和postgresql相同的策略,即建立乙個和當前資料庫檔案相同大小的新資料庫檔案,之後再將該資料庫檔案中的資料有組織的匯入到新檔案中,其中已經刪除的資料塊將不會被匯入,在完成匯入後,收縮新資料庫檔案的尺寸到適當的大小。該命令的執行非常簡單,如:

sqlite> vacuum;

作者 stephen_liu

SQLite學習手冊 索引和資料分析 清理

posted on 2012 02 17 00 09 0 編輯收藏 一 建立索引 在sqlite中,建立索引的sql語法和其他大多數關係型資料庫基本相同,因為這裡也僅僅是給出示例用法 sqlite create table testtable first col integer,second col...

SQLite學習手冊 索引和資料分析 清理

一 建立索引 在sqlite中,建立索引的sql語法和其他大多數關係型資料庫基本相同,因為這裡也僅僅是給出示例用法 sqlite create table testtable first col integer,second col integer 建立最簡單的索引,該索引基於某個表的乙個字段。sq...

SQLite學習手冊 索引和資料分析 清理

一 建立索引 在sqlite中,建立索引的sql語法和其他大多數關係型資料庫基本相同,因為這裡也僅僅是給出示例用法 sqlite create table testtable first col integer,second col integer 建立最簡單的索引,該索引基於某個表的乙個字段。sq...