2017-08-21 28 views
1

我有一個主表,看起來像SQLite的內部連接2臺成一個主表

CREATE TABLE IF NOT EXISTS filesystem (
    inode   INTEGER PRIMARY KEY, 
    uid    TEXT, 
    gid    TEXT, 
    type   TEXT, 
    pathname  TEXT, 
    parentinode  INTEGER, 
    FileCounter  INTEGER DEFAULT 0, 
    DirCounter  INTEGER DEFAULT 0, 
    TotalByteSum INTEGER DEFAULT 0) 

和第二子表看起來像:

CREATE TABLE IF NOT EXISTS groups (
    gid   TEXT PRIMARY KEY, 
    groupname TEXT 

    CREATE TABLE IF NOT EXISTS users (
    uid   TEXT PRIMARY KEY, 
    username TEXT 

目前我使用:

CREATE TABLE completeFileSystem AS SELECT filesystem.inode, users.username, groups.groupname, filesystem.type, filesystem.pathname,filesystem.parentinode, filesystem.FileCounter, filesystem.DirCounter, filesystem.TotalByteSum 
FROM filesystem 
INNER JOIN users ON filesystem.uid = users.uid 
INNER JOIN groups ON groups.gid = filesystem.gid 

創建一個新的表導致我的數據庫文件比預期的大。

我想內部連接filesystem.uid = users.uid和filesystem.gid = groups.gid直接到文件系統表。這在SQLite中可能嗎?如果改變了任何東西,我正在使用Python來編寫這些sql語句的腳本。

+0

呃是的,只是做沒有創建表的SELECT,當然? –

+0

@丹尼爾羅斯曼這將內心加入一個查詢。我希望我的gid和uid列可以直接在文件系統表中更新,以便稍後能夠執行多個查詢。 –

+0

然後,您想要一個[view](https://sqlite.org/lang_createview.html)的聲音。 –

回答

0

考慮使用視圖這樣的:

CREATE VIEW completeFileSystem AS 
SELECT ... 
FROM filesystem 
JOIN users USING (uid) 
JOIN groups USING (gid); 

這通常是速度不夠快。 (通過使兩個查找表WITHOUT ROWID tables可以加快一點。) 如果主表有很多行,則通過僅存儲用戶/組ID的方式保存的空間將減少I/O,從而可以補償爲了做這些連接的努力。

對於您的特定應用程序來說,這是否足夠快是您必須測量自己的事情。