public void generate_data() { //theContainer.Inject<ISerializer>(new TestsSerializer()); theContainer.GetInstance <DocumentCleaner>().CompletelyRemove(typeof(Target)); // Get Roslyn spun up before measuring anything var schema = theContainer.GetInstance <IDocumentSchema>(); schema.MappingFor(typeof(Target)).As <DocumentMapping>().DuplicateField("Date"); schema.StorageFor(typeof(Target)).ShouldNotBeNull(); theContainer.GetInstance <DocumentCleaner>().DeleteDocumentsFor(typeof(Target)); var session = theContainer.GetInstance <IDocumentStore>().OpenSession(); var store = theContainer.GetInstance <IDocumentStore>(); var data = Target.GenerateRandomData(10000).ToArray(); Timings.Time(() => { store.BulkInsert(data); }); var theDate = DateTime.Today.AddDays(3); var one = Timings.Time(() => { var sql = "select data from mt_doc_target where (data ->> 'Date')::date = ?"; session.Query <Target>(sql, theDate).ToArray().Length.ShouldBeGreaterThan(0); }); var two = Timings.Time(() => { var sql = "select r.data from mt_doc_target as r, LATERAL jsonb_to_record(r.data) as l(\"Date\" date) where l.\"Date\" = ?"; session.Query <Target>(sql, theDate).ToArray().Count().ShouldBeGreaterThan(0); }); var three = Timings.Time(() => { var sql = "select r.data from mt_doc_target as r where r.date = ?"; session.Query <Target>(sql, theDate).ToArray().Count().ShouldBeGreaterThan(0); }); Debug.WriteLine($"json locator: {one}, lateral join: {two}, searchable field: {three}"); }