Top SQL Interview Questions and Answers

author image Hirely
at 08 Jan, 2025

Question: What are indexes in SQL?

Answer:

An index in SQL is a data structure that improves the speed of data retrieval operations on a database table at the cost of additional space and time spent on updates, inserts, and deletes. Indexes are used to quickly locate and access data without having to scan the entire table. They are particularly useful for improving query performance, especially when dealing with large datasets.

Key Points:

  • Purpose: The primary purpose of an index is to enhance the speed of queries, particularly those involving SELECT statements with WHERE, ORDER BY, and JOIN clauses.
  • Types: There are different types of indexes such as unique indexes, composite indexes, and full-text indexes.
  • Structure: An index is often implemented using a B-tree or hashing, depending on the database system. In a B-tree, data is arranged in a hierarchical manner that allows quick searching.

Syntax for Creating an Index:

CREATE INDEX index_name
ON table_name (column1, column2, ...);

Types of Indexes:

  1. Single-Column Index:

    • Indexes created on a single column.
    • Example: Index on the name column of a Users table.
    CREATE INDEX idx_name ON Users (name);
  2. Composite Index:

    • Indexes created on multiple columns.
    • Useful when queries use multiple columns in the WHERE clause.
    CREATE INDEX idx_name_date ON Orders (name, order_date);
  3. Unique Index:

    • Ensures that the indexed columns have unique values.
    • Often used for primary and unique keys.
    CREATE UNIQUE INDEX idx_email ON Users (email);
  4. Full-Text Index:

    • Used for indexing large text fields for full-text searches (commonly used with TEXT or VARCHAR fields).
    • Not supported by all database systems but often used in search engines.
    CREATE FULLTEXT INDEX idx_fulltext ON Articles (content);
  5. Primary Key and Foreign Key Indexes:

    • Automatically created when defining a primary or foreign key on a table.
    • A primary key automatically creates a unique index on the primary key column(s), and a foreign key often creates an index to speed up lookups in the parent table.

How Indexes Work:

  • When you create an index, the database creates an auxiliary data structure (usually a B-tree or hash table) to store pointers to the rows in the table.
  • The database uses this index to quickly locate the rows that match the query conditions, avoiding a full table scan.
  • For example, if you have an index on the name column in the Users table, and you search for a specific name, the database uses the index to locate the relevant rows quickly.

Example: Index Usage

Consider the following Employees table:

EmployeeIDFirstNameLastNameAgeDepartment
1JohnDoe30HR
2JaneSmith25IT
3MaryJohnson35HR
4JamesBrown40IT

If you frequently search by LastName and Department, creating an index on those columns would speed up queries.

CREATE INDEX idx_lastname_department ON Employees (LastName, Department);

Now, when querying:

SELECT * FROM Employees WHERE LastName = 'Doe' AND Department = 'HR';

The database can use the index to find the relevant row much faster than scanning the entire table.

Advantages of Using Indexes:

  1. Faster Data Retrieval: Indexes significantly improve the speed of data retrieval queries, especially on large tables.
  2. Efficient Sorting: When querying with ORDER BY, indexes can help the database to quickly sort the data without performing a full sort.
  3. Better Performance for Joins: Indexes can improve the performance of JOIN operations by speeding up matching rows between tables.

Disadvantages of Using Indexes:

  1. Increased Storage Space: Indexes consume additional disk space because they store duplicate data (pointers) to the rows.
  2. Slower Writes (INSERT, UPDATE, DELETE): Every time a row is inserted, updated, or deleted, the corresponding indexes must be updated, which can slow down write operations.
  3. Complexity in Maintenance: As the table grows and changes, indexes may need to be rebuilt or reorganized to maintain performance.

Common Use Cases:

  • Primary Key Constraints: Automatically indexed.
  • Foreign Key Constraints: Foreign keys typically benefit from indexing for faster lookups and integrity checks.
  • Frequent Query Filters: Columns frequently used in WHERE clauses benefit from indexing.
  • Frequent Sorting: Columns used in ORDER BY clauses can be indexed for better performance.

Example: Dropping an Index

To remove an index from a table, you can use the DROP INDEX command.

DROP INDEX idx_lastname_department ON Employees;

Key Takeaways:

  • Indexes improve query performance by allowing the database to quickly locate rows based on specific column values.
  • B-tree and hash are common data structures used for indexing.
  • Indexes can be single-column or composite (multiple columns).
  • While indexes enhance read performance, they may slow down write operations and consume additional storage space.

Question: What is the difference between CHAR and VARCHAR in SQL?

Answer:

CHAR and VARCHAR are both data types used to store character strings in SQL. While they may seem similar, there are key differences between them, mainly in how they store data and how much space they consume.

Key Differences:

1. Fixed vs Variable Length:

  • CHAR:
    • Fixed-length data type. The storage size is fixed according to the specified length, even if the actual data is shorter.
    • For example, if you define a column as CHAR(10) and store the string "Hello", it will still use 10 bytes of storage, padding the remaining 5 characters with spaces.
  • VARCHAR:
    • Variable-length data type. It stores only the actual length of the string and does not pad with extra spaces.
    • For example, if you define a column as VARCHAR(10) and store the string "Hello", it will only use 5 bytes of storage (the length of "Hello").

2. Storage Efficiency:

  • CHAR:
    • May waste storage space because it always uses the defined length.
    • Useful for storing strings that are always of a consistent length, like country codes (CHAR(2) for “US”, “IN”, etc.).
  • VARCHAR:
    • More storage-efficient because it only uses the space needed for the string, plus a small amount of overhead to store the length of the string.
    • Ideal for strings of varying lengths, such as names, addresses, or descriptions.

3. Performance:

  • CHAR:
    • Because of its fixed size, CHAR can be faster for retrieving fixed-length strings. However, it can be slower when storing variable-length strings due to the padding.
  • VARCHAR:
    • VARCHAR can be slightly slower for retrieval, as the database needs to handle variable-length data, but it’s generally more efficient in terms of storage and handling strings of varying lengths.

4. Padding Behavior:

  • CHAR:
    • Automatically pads the string with spaces if it’s shorter than the defined length.
    • For example, if CHAR(5) contains "Hi", the database stores it as "Hi " (with 3 trailing spaces).
  • VARCHAR:
    • Does not add padding. It stores only the actual data, so "Hi" will be stored as "Hi" with no trailing spaces.

5. Use Cases:

  • CHAR:
    • Best used for columns that always store data of the same length, such as:
      • Fixed-length codes (e.g., country codes, postal codes, product codes).
      • Binary data (if you’re working with fixed-length binary strings).
  • VARCHAR:
    • Ideal for columns where the length of the data can vary:
      • Names, email addresses, descriptions, addresses, etc.

Example:

  1. Using CHAR:

    CREATE TABLE Users (
      user_id INT PRIMARY KEY,
      country_code CHAR(2)
    );
    • If you store "US" in the country_code column, it takes up 2 bytes. But if you store "IN", it will still take up exactly 2 bytes, with no padding.
  2. Using VARCHAR:

    CREATE TABLE Users (
      user_id INT PRIMARY KEY,
      email VARCHAR(255)
    );
    • If you store "[email protected]" in the email column, it will only take up the exact length of the string (16 bytes in this case).

Summary Table:

FeatureCHARVARCHAR
LengthFixedVariable
StorageAlways uses the specified lengthUses only the actual length + overhead
PaddingPads with spaces if shorterNo padding, stores only actual data
EfficiencyWastes space for shorter stringsMore efficient for variable-length strings
Use CasesFixed-length data (e.g., country codes)Variable-length data (e.g., names, email addresses)

Key Takeaways:

  • Use CHAR when the length of the data is constant and known.
  • Use VARCHAR when the length of the data varies, as it is more efficient in terms of storage.

Read More

If you can’t get enough from this article, Aihirely has plenty more related information, such as SQL interview questions, SQL interview experiences, and details about various SQL job positions. Click here to check it out.

Related Posts

Trace Job opportunities

Hirely, your exclusive interview companion, empowers your competence and facilitates your interviews.

Get Started Now