一、創(chuàng)建索引:
在SQLite中,創(chuàng)建索引的SQL語法和其他大多數(shù)關(guān)系型數(shù)據(jù)庫基本相同,因?yàn)檫@里也僅僅是給出示例用法:
索引的刪除和視圖的刪除非常相似,含義也是如此,因此這里也只是給出示例:
重建索引用于刪除已經(jīng)存在的索引,同時(shí)基于其原有的規(guī)則重建該索引。這里需要說明的是,如果在REINDEX語句后面沒有給出數(shù)據(jù)庫名,那么當(dāng)前連接下所有Attached數(shù)據(jù)庫中所有索引都會(huì)被重建。如果指定了數(shù)據(jù)庫名和表名,那么該表中的所有索引都會(huì)被重建,如果只是指定索引名,那么當(dāng)前數(shù)據(jù)庫的指定索引被重建。
和PostgreSQL非常相似,SQLite中的ANALYZE命令也同樣用于分析數(shù)據(jù)表和索引中的數(shù)據(jù),并將統(tǒng)計(jì)結(jié)果存放于SQLite的內(nèi)部系統(tǒng)表中,以便于查詢優(yōu)化器可以根據(jù)分析后的統(tǒng)計(jì)數(shù)據(jù)選擇最優(yōu)的查詢執(zhí)行路徑,從而提高整個(gè)查詢的效率。見如下示例:
和PostgreSQL中的VACUUM命令相比,他們的功能以及實(shí)現(xiàn)方式非常相似,不同的是PostgreSQL提供了更細(xì)的粒度,而SQLite只能將該命令作用于數(shù)據(jù)庫,無法再精確到數(shù)據(jù)庫中指定的數(shù)據(jù)表或者索引,然而這一點(diǎn)恰恰是PostgreSQL可以做到的。
當(dāng)某個(gè)數(shù)據(jù)庫中的一個(gè)或多個(gè)數(shù)據(jù)表存在大量的插入、更新和刪除等操作時(shí),將會(huì)有大量的磁盤空間被已刪除的數(shù)據(jù)所占用,在沒有執(zhí)行VACUUM命令之前,SQLite并沒有將它們歸還于操作系統(tǒng)。由于該類數(shù)據(jù)表中的數(shù)據(jù)存儲(chǔ)非常分散,因此在查詢時(shí),無法得到更好的批量IO讀取效果,從而影響了查詢效率。
在SQLite中,僅支持清理當(dāng)前連接中的主數(shù)據(jù)庫,而不能清理其它Attached數(shù)據(jù)庫。VACUUM命令在完成數(shù)據(jù)清理時(shí)采用了和PostgreSQL相同的策略,即創(chuàng)建一個(gè)和當(dāng)前數(shù)據(jù)庫文件相同大小的新數(shù)據(jù)庫文件,之后再將該數(shù)據(jù)庫文件中的數(shù)據(jù)有組織的導(dǎo)入到新文件中,其中已經(jīng)刪除的數(shù)據(jù)塊將不會(huì)被導(dǎo)入,在完成導(dǎo)入后,收縮新數(shù)據(jù)庫文件的尺寸到適當(dāng)?shù)拇笮?。該命令的?zhí)行非常簡(jiǎn)單,如:
標(biāo)簽:阜陽 海北 荊州 那曲 泰州 通化 臨滄 齊齊哈爾
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQLite教程(五):索引和數(shù)據(jù)分析/清理》,本文關(guān)鍵詞 SQLite,教程,五,索引,和,數(shù)據(jù)分析,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。