Queries on large databases can have significant execution times, but too heavy or a load may disrupt service for other users. Several factors must be considered to optimize a database:
Below are a few methods that can be used to optimize query runtime.
A straightforward, yet effective, method for query optimization is indexing. Indexes can be thought of as duplicate tables containing records that may be needed often. This way, the whole database won’t need to be searched for these queries. For example, if a system needed to query first and last names and ID numbers of employees based on their age, the following script could be used to create the index:
CREATE INDEX age_queries
ON Employees (last_name, first_name, id, age);
Inner Join
instead of Where
To link data from two or more tables, the Where
clause is used. However, Where
uses a kind of join that joins each record of each table and then filters it for the result. This means that if there are 100 records in the Employee table and 100 in the Salary table, it will generate a table of 10,000 records and then check for the correct records for this query.
Select Employees.first_name, Employees.last_name, Employees.id
From Employees, Salary
Where Employees.id = Salary.id;
In contrast, if the Inner Join
is used, the required records will be produced without anything in the middle.
Select Employees.first_name, Employees.last_name, Employees.id
From Employees Inner Join Salary
On Employees.id = Salary.id;
Limit
for testingBefore running a query on a large database with other potential users, it is advised to use the limit
operator to ensure that it actually works. The limit keyword returns a limited number of results from a query, as shown below.
Select Employees.first_name, Employees.last_name, Employees.id
From Employees Inner Join Salary
On Employees.id = Salary.id
Where Salary.amount > 4500
Limit 10;
This will return only ten names and ID numbers of Employees with salaries greater than 4,500.
Explain
When querying a large database, it might be smart to use the Explain
operator before running the query. Explain
displays what is called a Query Plan. The query plan shows the order of execution and the approximate time each step might take. Using this information, more time-expensive steps may be better optimized. The following example shows how to use this operator:
Explain
Select Employees.first_name, Employees.last_name, Employees.id
From Employees Inner Join Salary
On Employees.id = Salary.id
Where Salary.amount > 4500;
Select
queriesWhen working with Select
queries, it is smart to avoid the *
operator, which returns all columns for the queried records unless otherwise required. Instead, only the required information should be extracted. For example:
Select *
From Employees;
This operation would generate all columns of all records from the Employees table. This is inefficient if only the names were required. In that case, the following query should be used:
Select first_name, last_name
From Employees;
Overall, to completely optimize database usage, engineers should know how each function works and how the databases that they use are setup. This knowledge will allow them to make technically informed decisions with their queries.