The query evaluation problem takes two inputs: the query to be answered, and the database on which to answer it. The output of the problem is the set of answers to the query on the database. If the queries are Boolean queries, i.e., queries have a yes or no answer (for example, Boolean conjunctive queries) then the query evaluation problem is a decision problem.
The query evaluation problem is usually posed for a specific class of queries and databases. For instance, one example of the query evaluation problem would be the problem of evaluating a conjunctive query on a relational database.
The computational complexity of the problem can be measured in different ways,[1] to account for the fact that the two inputs of the problem are different:
The combined complexity of the query evaluation problem is its computational complexity when measured as a function of the two inputs, i.e., the query and the database, as usual in computational complexity.
The data complexity is the computational complexity when the query is fixed and when the input is just the database. For instance, we say that query evaluation has polynomial-time data complexity for a class of queries if, for every fixed query Q in that class, given a database D, we can compute the answers to Q on D in polynomial time.
Less commonly, we can study the query complexity, which is the computational complexity when the database is fixed and when the input is just the query. This is also called expression complexity.[2]
The complexity of query evaluation can be studied for queries that return answers, or for Boolean queries (yes/no queries). However, we can often reduce to the case of Boolean queries. More specifically, if the number of answers to the query is always polynomial in the database size, and if we can rewrite the query to a Boolean query for each answer, then we can reduce query evaluation for a non-Boolean query to polynomially many Boolean query evaluation problems.[citation needed]