這是一個重現結果的示例。資料庫從 144.4 MB 變為 60.6 MB。
我的 UNIQUE 列通常包含幾段文本(例如 500 個字)。
import sqlite3
import os
db_file = 'databases/test.db'
conn = sqlite3.connect(db_file) # file path
cur = conn.cursor()
# CREATE table
cur.execute('''CREATE TABLE orig_table (
key TEXT PRIMARY KEY,
unq TEXT UNIQUE
)''')
records = []
for i, record in enumerate(range(10000)):
records.append(('primary' str(i), 500 * (' unique' str(i))))
cur.executemany("INSERT INTO orig_table VALUES (?,?)", records)
conn.commit()
print('Original size:', str( round(os.path.getsize(db_file)/1000000,1)) ' MB')
# Remove UNIQUE constraint
cur.execute('''CREATE TABLE new_table (
key TEXT PRIMARY KEY,
unq TEXT
)''')
cur.execute('''INSERT INTO new_table (key, unq)
SELECT key, unq FROM orig_table
''')
cur.execute('DROP TABLE orig_table')
conn.commit()
conn.execute('VACUUM')
conn.close()
print('Final size:', str( round(os.path.getsize(db_file)/1000000,1)) ' MB')
uj5u.com熱心網友回復:
UNIQUE 約束使用列的索引來加速每個新值的唯一性驗證。大小差異對應于索引的大小。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/482779.html
上一篇:如何獲取值陣列的資料
