濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > SQLite教程(五):索引和數(shù)據(jù)分析/清理

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

熱門(mén)標(biāo)簽:智能電銷(xiāo)機(jī)器人教育 北京智能外呼系統(tǒng)供應(yīng)商家 電話(huà)機(jī)器人錄音師薪資 高德地圖標(biāo)注電話(huà)怎么沒(méi)了 中國(guó)地圖標(biāo)注省份用什么符號(hào) 江西穩(wěn)定外呼系統(tǒng)供應(yīng)商 奧維地圖標(biāo)注字體大小修改 無(wú)錫梁溪公司怎樣申請(qǐng)400電話(huà) 孝感銷(xiāo)售電銷(xiāo)機(jī)器人廠家

一、創(chuàng)建索引:

    在SQLite中,創(chuàng)建索引的SQL語(yǔ)法和其他大多數(shù)關(guān)系型數(shù)據(jù)庫(kù)基本相同,因?yàn)檫@里也僅僅是給出示例用法:
 

復(fù)制代碼 代碼如下:

    sqlite> CREATE TABLE testtable (first_col integer,second_col integer);
    --創(chuàng)建最簡(jiǎn)單的索引,該索引基于某個(gè)表的一個(gè)字段。
    sqlite> CREATE INDEX testtable_idx ON testtable(first_col);
    --創(chuàng)建聯(lián)合索引,該索引基于某個(gè)表的多個(gè)字段,同時(shí)可以指定每個(gè)字段的排序規(guī)則(升序/降序)。
    sqlite> CREATE INDEX testtable_idx2 ON testtable(first_col ASC,second_col DESC);
    --創(chuàng)建唯一性索引,該索引規(guī)則和數(shù)據(jù)表的唯一性約束的規(guī)則相同,即NULL和任何值都不同,包括NULL本身。
    sqlite> CREATE UNIQUE INDEX testtable_idx3 ON testtable(second_col DESC);
    sqlite> .indices testtable
    testtable_idx
    testtable_idx2   
    testtable_idx3
 

    從.indices命令的輸出可以看出,三個(gè)索引均已成功創(chuàng)建。
   
二、刪除索引:

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

復(fù)制代碼 代碼如下:
  
    sqlite> DROP INDEX testtable_idx;
    --如果刪除不存在的索引將會(huì)導(dǎo)致操作失敗,如果在不確定的情況下又不希望錯(cuò)誤被拋出,可以使用"IF EXISTS"從句。
    sqlite> DROP INDEX testtable_idx;
    Error: no such index: testtable_idx
    sqlite> DROP INDEX IF EXISTS testtable_idx;

三、重建索引:

    重建索引用于刪除已經(jīng)存在的索引,同時(shí)基于其原有的規(guī)則重建該索引。這里需要說(shuō)明的是,如果在REINDEX語(yǔ)句后面沒(méi)有給出數(shù)據(jù)庫(kù)名,那么當(dāng)前連接下所有Attached數(shù)據(jù)庫(kù)中所有索引都會(huì)被重建。如果指定了數(shù)據(jù)庫(kù)名和表名,那么該表中的所有索引都會(huì)被重建,如果只是指定索引名,那么當(dāng)前數(shù)據(jù)庫(kù)的指定索引被重建。
 

復(fù)制代碼 代碼如下:

    --當(dāng)前連接attached所有數(shù)據(jù)庫(kù)中的索引都被重建。
    sqlite> REINDEX;
    --重建當(dāng)前主數(shù)據(jù)庫(kù)中testtable表的所有索引。
    sqlite> REINDEX testtable;
    --重建當(dāng)前主數(shù)據(jù)庫(kù)中名稱(chēng)為testtable_idx2的索引。
    sqlite> REINDEX testtable_idx2;
   

四、數(shù)據(jù)分析:

    和PostgreSQL非常相似,SQLite中的ANALYZE命令也同樣用于分析數(shù)據(jù)表和索引中的數(shù)據(jù),并將統(tǒng)計(jì)結(jié)果存放于SQLite的內(nèi)部系統(tǒng)表中,以便于查詢(xún)優(yōu)化器可以根據(jù)分析后的統(tǒng)計(jì)數(shù)據(jù)選擇最優(yōu)的查詢(xún)執(zhí)行路徑,從而提高整個(gè)查詢(xún)的效率。見(jiàn)如下示例:
 

復(fù)制代碼 代碼如下:

    --如果在ANALYZE命令之后沒(méi)有指定任何參數(shù),則分析當(dāng)前連接中所有Attached數(shù)據(jù)庫(kù)中的表和索引。
    sqlite> ANALYZE;
    --如果指定數(shù)據(jù)庫(kù)作為ANALYZE的參數(shù),那么該數(shù)據(jù)庫(kù)下的所有表和索引都將被分析并生成統(tǒng)計(jì)數(shù)據(jù)。
    sqlite> ANALYZE main;
    --如果指定了數(shù)據(jù)庫(kù)中的某個(gè)表或索引為ANALYZE的參數(shù),那么該表和其所有關(guān)聯(lián)的索引都將被分析。
    sqlite> ANALYZE main.testtable;
    sqlite> ANALYZE main.testtable_idx2;

五、數(shù)據(jù)清理:

    和PostgreSQL中的VACUUM命令相比,他們的功能以及實(shí)現(xiàn)方式非常相似,不同的是PostgreSQL提供了更細(xì)的粒度,而SQLite只能將該命令作用于數(shù)據(jù)庫(kù),無(wú)法再精確到數(shù)據(jù)庫(kù)中指定的數(shù)據(jù)表或者索引,然而這一點(diǎn)恰恰是PostgreSQL可以做到的。
    當(dāng)某個(gè)數(shù)據(jù)庫(kù)中的一個(gè)或多個(gè)數(shù)據(jù)表存在大量的插入、更新和刪除等操作時(shí),將會(huì)有大量的磁盤(pán)空間被已刪除的數(shù)據(jù)所占用,在沒(méi)有執(zhí)行VACUUM命令之前,SQLite并沒(méi)有將它們歸還于操作系統(tǒng)。由于該類(lèi)數(shù)據(jù)表中的數(shù)據(jù)存儲(chǔ)非常分散,因此在查詢(xún)時(shí),無(wú)法得到更好的批量IO讀取效果,從而影響了查詢(xún)效率。
    在SQLite中,僅支持清理當(dāng)前連接中的主數(shù)據(jù)庫(kù),而不能清理其它Attached數(shù)據(jù)庫(kù)。VACUUM命令在完成數(shù)據(jù)清理時(shí)采用了和PostgreSQL相同的策略,即創(chuàng)建一個(gè)和當(dāng)前數(shù)據(jù)庫(kù)文件相同大小的新數(shù)據(jù)庫(kù)文件,之后再將該數(shù)據(jù)庫(kù)文件中的數(shù)據(jù)有組織的導(dǎo)入到新文件中,其中已經(jīng)刪除的數(shù)據(jù)塊將不會(huì)被導(dǎo)入,在完成導(dǎo)入后,收縮新數(shù)據(jù)庫(kù)文件的尺寸到適當(dāng)?shù)拇笮?。該命令的?zhí)行非常簡(jiǎn)單,如:
 

復(fù)制代碼 代碼如下:

    sqlite> VACUUM;

您可能感興趣的文章:
  • SQLite教程(一):SQLite數(shù)據(jù)庫(kù)介紹
  • SQLite教程(二):C/C++接口簡(jiǎn)介
  • SQLite教程(三):數(shù)據(jù)表和視圖簡(jiǎn)介
  • SQLite教程(四):內(nèi)置函數(shù)
  • SQLite教程(五):數(shù)據(jù)庫(kù)和事務(wù)

標(biāo)簽:阜陽(yáng) 海北 荊州 那曲 泰州 通化 臨滄 齊齊哈爾

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQLite教程(五):索引和數(shù)據(jù)分析/清理》,本文關(guān)鍵詞  SQLite,教程,五,索引,和,數(shù)據(jù)分析,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《SQLite教程(五):索引和數(shù)據(jù)分析/清理》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于SQLite教程(五):索引和數(shù)據(jù)分析/清理的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    清水县| 沾化县| 郯城县| 华池县| 镇原县| 奉节县| 喀喇沁旗| 广德县| 偏关县| 略阳县| 白水县| 黄平县| 敖汉旗| 高州市| 铜陵市| 元江| 周至县| 保定市| 扬中市| 永泰县| 孟州市| 合水县| 基隆市| 廊坊市| 高阳县| 东台市| 土默特右旗| 福海县| 乌兰察布市| 兰州市| 南皮县| 麟游县| 郸城县| 沈阳市| 嵊州市| 丹江口市| 临高县| 仪征市| 余干县| 柳江县| 万州区|