SQL Query Optimization Techniques

1. ใช้ EXIST() แทน COUNT() ในการหา ข้อมูลใน Table

SELECT 
  EXISTS(
    SELECT 
      * 
    FROM 
      user
    WHERE 
      id = 18
  );

ข้อมูลที่จะ ได้รับจะเป็น 0 คือไม่มี และ 1 คือมีข้อมูล

2. ใช้ Varchar แทน Char

ตัวอย่าง CHAR(100) จะใช้ 100 bytes ของหน่วยความจำเพื่อเก็บ single character

ตัวอย่าง VARCHAR(100) จะใช้แค่ 1 byte ของหน่วยความจำเพื่อเก็บ single character.

CREATE TABLE user(
  id INT PRIMARY KEY, 
  userNameCharCol CHAR(10), 
  userNameVarcharCol VARCHAR(10)
);

3. หลีกเลี่ยงการใช้ Subqueries ใน WHERE Clause

# Using a subquery
SELECT 
  * 
FROM 
  orders 
WHERE 
  customer_id IN (
    SELECT 
      id 
    FROM 
      customers 
    WHERE 
      country = 'INDIA'
  );

# Using a join operation
SELECT 
  orders.* 
FROM 
  orders 
  JOIN customers ON orders.customer_id = customers.id 
WHERE 
  customers.country = 'INDIA';

4. เรียงลำดับการ JOINs จาก Table ที่มีข้อมูลเยอะกว่าเสมอ

# Order table is larger than the Customer table

# Join from a larger table to a smaller table
SELECT 
  * 
FROM 
  Order 
  JOIN Customer ON Customer.id = Order.id


# Join from a smaller table to a larger table
SELECT 
  * 
FROM 
  Customer 
  JOIN Order ON Customer.id = Order.id

5. ใช้`regexp_like` แทน `LIKE`

# Query using the LIKE clause
SELECT 
  * 
FROM 
  mytable 
WHERE 
  (
    name LIKE 'A%' 
    OR name LIKE 'B%'
  );
  
# Query using regexp_like clause
SELECT 
  * 
FROM 
  mytable 
WHERE 
  regexp_like(name, '^[AB].*');

Ref. https://www.kdnuggets.com/2023/03/sql-query-optimization-techniques.html