0

我有一个sqlite数据库,73 MB当我从硬盘运行我的应用程序时,它的第一个查询很快,但是当我运行我的应用程序表单 DVD 时,第一个查询需要大约 30 秒才能运行。

所以我想问一下当我的应用程序从 DVD 运行时到底发生了什么?

我可以通过将数据库吐出到一些小部分来提高数据库的第一次查询速度吗?

这是我的查询:

var SQlQuery = string.Format("SELECT ContentText FROM TblBookContent " +
                  "WHERE (BookID = {0}) AND (BookContentIndex={1}) Limit 1", bookid, BookContentIndex);
            string ConString = string.Format("Data Source={0}{1}.s3db;Version = 3;",
                CFAddress.ADatabase, DBName.BooksDB);

            using (SQLiteConnection connection = new SQLiteConnection(ConString))
            {
                connection.Open();
                using (SQLiteCommand command = new SQLiteCommand(SQlQuery, connection))
                {
                    using (SQLiteDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            CHtmlDesign.HtmlFile = reader["ContentText"].ToString();
                        }
                    }
                }
                connection.Close();
            }
4

1 回答 1

3

我想这更多地与 DVD 驱动器上的寻道时间有关。与硬盘相比,CD 和 DVD 的寻道时间相当慢(HDD 转速为 5000+ RPM,数据库服务器通常配备转速超过 11000RPM 的 HDD),而 CD 和 DVD 的转速要慢得多且速度可变(可能约为 250 CD 为 500 RPM,DVD 为 600 至 1300 RPM)

这些 RPM 部分决定了寻道时间,因为如果您需要磁盘另一部分上的数据,则必须加快或减慢到正确的旋转速度,并等待要返回读磁头的磁盘部分。而且,如果您没有及时将读取头移动到磁盘的一部分,则必须等待另一次旋转。

CD 和 DVD 非常擅长线性访问(例如音频或视频录制),但随机访问却很糟糕,因为查找所需信息需要时间。

于 2013-01-26T11:18:41.397 回答