AVL trees have a wide range of applications. They are used in file systems to store directory structure and help implement symbol tables in compilers. They are also used in spell checkers, text editors, and auto-correction features to hold dictionaries. Moreover, they are used in routing algorithms to optimize the lookup for network routes, and finally, they are used to index databases and support lookup, ranging, and scanning.
An AVL tree is a type of binary search tree also known as a self-balancing tree. The unique property of AVL trees is that the difference between the left and right subtree of any node in an AVL is strictly one and cannot exceed that.
AVL trees have efficient insertion, deletion, and search results. In databases, AVL trees can speed up the data retrieval rate.
Note: For a detailed explanation about binary search trees, check out the What is a Binary Search Tree? Answer.
Each node in an AVL tree represents some data/record stored.
Each node in the tree has a key value, with two pointers pointing to its left child and the other to the right child.
The key value in the node is used for indexing and comparing the data for further insertion.
The tree insertion, deletion, and balancing are done in AVL trees.
The difference between the left and right subtree cannot exceed one.
(True/False): Is the above tree balanced?
True
False
The steps to database indexing using AVL trees are as given below:
The first step is to create a table. We’ll look into this separately for the SQL and NoSQL databases.
The code below creates a table student with the attributes, i.e., id
, firstname
, and lastname
of the student with the datatypes defined:
CREATE TABLE student (_id INT PRIMARY KEY,firstname VARCHAR(255),lastname VARCHAR(255));SELECT * FROM student;
The code below creates a collection to store data in MongoDB:
db.createCollection("StudentCollection");
The next step is to create an index. Practically the databases system manage to do indexing internally so specific syntax might not be present. So we will create an index on the key columns( _id
).
The code below creates the index on _id
in PostgreSQL:
CREATE INDEX id_key ON student (_id);SELECT * FROM student;
The code below creates the index on _id
in MongoDB:
db.StudentCollection.createIndex({ _id: 1 });
The code to insert data in SQL is given below. The AVL tree index will self-balance the data in database. To insert data in NoSQL, use appropriate commands for document manipulation based on the NoSQL database being used.
INSERT INTO student (_id, firstname, lastname)VALUES (1, 'John', 'Krew'),(2, 'Smith', 'Joe');SELECT * FROM student;
The code to delete data from database is given below. The AVL tree will balance automatically after deletion. To delete data in NoSQL, use appropriate commands for document manipulation based on the NoSQL database being used.
DELETE FROM student WHERE _id = 1;SELECT * FROM student;
The code to search data from database is given below. The AVL tree is used for efficient data retrieval. To search data in NoSQL, use appropriate commands for document manipulation based on the NoSQL database being used.
SELECT * FROM student WHERE _id = 2;
Updating the data triggers the AVL trees adjustment.
UPDATE student SET firstname = 'John' WHERE _id = 1;SELECT * FROM student;
Most recent DBMS automatically select the appropriate indexing structures based on their data distribution. While we don’t use AVL_TREE
as a command, the underlying structure provides similar balanced behavior.
Free Resources