You are here: Tuning > Main Operations Performance > Query Performance > Query Structure

Query Structure

More complex queries take longer to execute, as they include more constrains and can impose some additional operations as sorting, aggregate, negation etc.

QueryPerformanceBenchmark.cs: RunQueryStructureTest
private void RunQueryStructureTest()
         {
            Init();

            Clean();
            System.Console.WriteLine("Storing objects as a bulk:");
            Open(Configure());
            Store();
            Close();

            //
            Open(Configure());
            System.Console.WriteLine("Simple SODA query:");
            StartTimer();
            IQuery query = objectContainer.Query();
            query.Constrain(typeof(Item));
            query.Descend("_name").Constrain("level1/1");
            Item item = (Item)query.Execute().Next();
            StopTimer("Select 1 object SODA: " + item._name);
            Close();

            //
            Open(Configure());
            System.Console.WriteLine("Sorted SODA query:");
            StartTimer();
            query = objectContainer.Query();
            query.Constrain(typeof(Item));
            query.Descend("_name").OrderDescending();
            item = (Item)query.Execute().Next();
            StopTimer("Select 1 object SODA: " + item._name);
            Close();

            //
            Open(Configure());
            System.Console.WriteLine("SODA query with joins:");
            StartTimer();
            query = objectContainer.Query();
            query.Constrain(typeof(Item));
            IConstraint con = query.Constrain("level2/1");
            query.Descend("_name").OrderDescending().Constrain("level1/1").Or(con);
            IList result = query.Execute();
            StopTimer("Selected " + result.Count + " objects SODA");
            Close();

        }
QueryPerformanceBenchmark.cs: Init
private void Init()
         {
            _filePath = "performance.db4o";
            // amount of objects
            _count = 10000;
            // depth of objects
            _depth = 3;
            _isClientServer = false;

        }
QueryPerformanceBenchmark.cs: Configure
private IConfiguration Configure()
         {
            IConfiguration config = Db4oFactory.NewConfiguration();
            return config;
        }

Results from the test machine:

Storing objects as a bulk:

Store 30000 objects: 3049ms

Simple SODA query:

Select 1 object SODA: level1/1: 440ms

Sorted SODA query:

Select 1 object SODA: level9999/2: 1509ms

SODA query with joins:

Selected 1 objects SODA: 1735ms

From the test results you can see that sorting makes the query slower, and adding additional constraints slows things down even more.

Download example code:

c#