1

我有一些大型数据库文件(每个大约 50GB),其中包含客户文档的图像(每个图片大小大约 300KB)。

我正在尝试将图片加载到我的查看器中,但它需要的时间太长,比如 1 分钟。专门用于第一个查询/记录。

string query = "select pic from tbl_pictures where record_id = '" + SearchID + "'";

            SQLiteConnection con = new SQLiteConnection(conString);
            SQLiteCommand cmd = new SQLiteCommand(query, con);
            con.Open();
            try
            {
                IDataReader rdr = cmd.ExecuteReader();
                try
                {
                    ListOfImagesBytes.Clear();
                    while (rdr.Read())
                    {
                        byte[] a = (System.Byte[])rdr[0];
                        ListOfImagesBytes.Add((System.Byte[])rdr[0]);


                    }
                }
                catch (Exception exc) { MessageBox.Show(exc.Message); }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            con.Close();

这是我创建数据库文件时的属性:

PRAGMA auto_vacuum = 1;
PRAGMA main.page_size = 4096;
PRAGMA main.locking_mode=NORMAL;
PRAGMA main.synchronous=NORMAL;
PRAGMA main.journal_mode=WAL;
PRAGMA main.cache_size=5000;
PRAGMA main.temp_store=Memory;
4

2 回答 2

3

您可能只是在使用零索引访问表深处的记录来提供帮助。也许添加一个索引?

CREATE INDEX record_id_index ON tbl_pictures(record_id);
于 2013-07-24T13:43:53.470 回答
0

数据库中 8k 或 16k 的页面大小可能会更好——SQLite 人员在http://www.sqlite.org/intern-v-extern-blob.html上有一个关于 BLOB 和性能的页面;但是,它似乎表明最大 100kB 的文件是可以的。比 100kB 大得多,性能会受到影响。

于 2013-07-24T13:44:25.013 回答