亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

SQLite教程(五):索引和數據分析/清理

瀏覽:215日期:2023-04-05 14:56:02

一、創建索引:

    在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;

標簽: SQLite
相關文章:
主站蜘蛛池模板: 好爽~好硬~好紧~蜜芽 | 黄色免费网站网址 | 91久久国产成人免费观看资源 | 在线精品国产 | 开心激情站| 中国一级特黄毛片 | 免费的一极毛片在线播放 | 美女视频黄是免费 | 国产一级精品高清一级毛片 | 国产亚洲毛片在线 | 性色网址 | 欧美xxxxx九色视频免费观看 | 深夜福利1000 | 国产成年人网站 | 欧美护士激情第一欧美精品 | 日韩 亚洲 制服 欧美 综合 | 成人黄色免费网址 | 国产在线观看一区二区三区四区 | 亚洲欧美日韩国产精品第不页 | 国产女主播在线 | 日韩成人性视频 | 天天影视色香欲综合网老头 | 黑人特级粗α级毛片 | 美女拍拍拍爽爽爽爽爽爽 | 在线欧美一区 | 俺去鲁婷婷六月色综合 | 日韩欧美一区二区三区不卡视频 | 免费色视频在线观看 | 国产日产精品久久久久快鸭 | 国产chinesehdxxxx大胸 | 免费一级a毛片在线播 | 国产日产精品久久久久快鸭 | 国产精品久久久久久久久免费观看 | 国产精品成人va在线观看入口 | 国产日韩欧美亚洲综合在线 | 一级毛片一级毛片一级毛片 | 欧美成人高清免费大片观看 | 小明永久2015www永久免费观看 | 一区二区不卡视频 | 国产免费高清视频在线观看不卡 | 99视频有精品视频免费观看 |