數據庫表(PostgreSQL的):NHibernate的 - 第一個查詢是痛苦的緩慢
CREATE TABLE test
(
id bigserial NOT NULL,
text text,
CONSTRAINT test_pkey PRIMARY KEY (id)
)
類:
public class Test
{
public virtual int ID { get; set; }
public virtual string Text { get; set; }
}
public class TestMap : ClassMap<Test>
{
public TestMap()
{
Table("test");
Id(x => x.ID, "id");
Map(x => x.Text, "text");
}
}
這是我如何查詢數據庫:
using (ISession session = SessionBuilder.OpenSession())
{
Stopwatch s = new Stopwatch();
s.Start();
var result = session.QueryOver<Test>().Where(test => test.Text == "aaa").List();
s.Stop();
Console.WriteLine(s.ElapsedMilliseconds); // >150ms
s.Restart();
var result2 = session.QueryOver<Test>().Where(test => test.Text == "bbb").List();
s.Stop();
Console.WriteLine(s.ElapsedMilliseconds); // ~4ms
}
爲什麼第一個查詢需要很長時間?有沒有辦法加快速度?
你需要做更多的挖掘。在PostgreSQL中啓用語句持續時間日誌並查看日誌,查看執行時間。查看nHibernate花費多少時間完成準備工作和元數據獲取,方法是在詳細瞭解之後檢查其日誌記錄。使用'explain analyze'來看看語句是如何執行的。等 – 2013-05-13 23:22:34
你有沒有發現過什麼造成了你的滯後?我正在使用MS SQL Server作爲RDBMS遇到類似的問題。第一個查詢大約需要1000毫秒。查詢很簡單。通過用戶名從數據庫獲取用戶對象,並且表在用戶名列上具有索引。 – 2015-08-26 14:28:26
@VladimirKocjancic是你的數據庫已經啓動並運行?因爲它可能只是數據庫的開始。 – TedOnTheNet 2015-10-01 22:31:45