0Pricing
PostgreSQL Performance & Query Optimization · درس

الفهارس الجزئية وفهارس التعبيرات

تعلّموا إنشاء فهارس على مجموعة جزئية من الصفوف أو على ناتج تعبير لتحسين الأداء بشكل موجّه.

الفهارس الجزئية وفهارس التعبيرات درس مجاني في PostgreSQL Performance & Query Optimization على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PostgreSQL Performance & Query Optimization، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PostgreSQL Performance & Query Optimization 4 دروس في المجموع.

بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.

Intro to Targeted Indexes

Welcome! In this lesson, we'll dive into two powerful, specialized index types in PostgreSQL: Partial Indexes and Expression Indexes.

These indexes allow for highly targeted optimization, focusing on specific subsets of data or the results of calculations, rather than entire columns.

Focus with Partial Indexes

A Partial Index is an index that covers only a portion of the rows in a table. You define this subset using a WHERE clause during index creation.

Think of it as filtering your index. Only rows that satisfy the WHERE condition will be included in the index structure.

Benefits of Partial Indexes

Why use a partial index?

  • Smaller Size: They take up less disk space and memory compared to full indexes.
  • Faster Updates: Less data to maintain means faster INSERT, UPDATE, and DELETE operations on the indexed table.
  • Reduced Bloat: Can significantly reduce index bloat on tables with frequently updated rows that don't satisfy the index's WHERE clause.

They shine when a small subset of rows is queried very often, like 'active' users or 'pending' orders.

Creating Partial Indexes

The syntax for a partial index is straightforward. You simply add a WHERE clause to your standard CREATE INDEX statement.

The condition in the WHERE clause must match the condition used in your queries for the index to be effective.

CREATE INDEX index_name
ON table_name (column_name)
WHERE condition;

Partial Index in Action

Let's see a partial index in action. We'll create an index on order_date specifically for orders with a status of 'pending'. This is common for e-commerce where 'pending' orders need quick attention.

Try running the code to see how it works:

CREATE TABLE orders (
  order_id SERIAL PRIMARY KEY,
  customer_id INT,
  order_date DATE,
  status VARCHAR(20)
);

INSERT INTO orders (customer_id, order_date, status) VALUES
(101, '2023-01-15', 'completed'),
(102, '2023-01-16', 'pending'),
(103, '2023-01-17', 'completed'),
(104, '2023-01-18', 'pending'),
(105, '2023-01-19', 'completed'),
(106, '2023-01-20', 'completed'),
(107, '2023-01-21', 'pending');

CREATE INDEX idx_pending_orders_date
ON orders (order_date)
WHERE status = 'pending';

EXPLAIN ANALYZE SELECT order_id, order_date
FROM orders
WHERE status = 'pending' AND order_date > '2023-01-01';

Indexing Expressions

An Expression Index (also known as a Function-Based Index) indexes the result of a function or expression, rather than just the raw column value.

This is incredibly useful when your queries frequently use functions on columns, like converting text to lowercase for case-insensitive searches.

Power of Expression Indexes

Expression indexes offer great flexibility:

  • Case-Insensitive Search: Index LOWER(column) or UPPER(column) to speed up queries like WHERE LOWER(column) = 'value'.
  • Date/Time Manipulation: Index DATE_TRUNC('month', timestamp_column) to optimize queries grouped or filtered by month.
  • Complex Computations: Index on mathematical results or custom functions if they are part of frequent query conditions.

Without an expression index, PostgreSQL would have to compute the function for every row during a scan, making it slow.

Creating Expression Indexes

To create an expression index, you simply replace the column name in your CREATE INDEX statement with the desired function or expression.

The important rule is that the expression in your query's WHERE clause must exactly match the expression used in the index definition for the index to be used.

CREATE INDEX index_name
ON table_name (expression);

Expression Index Example

Let's create an expression index to enable fast, case-insensitive searches on email addresses. This is a very common use case.

Notice how the EXPLAIN ANALYZE output should show an 'Index Scan' using our new idx_lower_email index.

CREATE TABLE users (
  user_id SERIAL PRIMARY KEY,
  username VARCHAR(50),
  email VARCHAR(100)
);

INSERT INTO users (username, email) VALUES
('Alice', 'alice@example.com'),
('Bob', 'BOB@example.com'),
('Charlie', 'Charlie@example.com'),
('David', 'david@example.com');

CREATE INDEX idx_lower_email ON users (LOWER(email));

EXPLAIN ANALYZE SELECT user_id, username
FROM users
WHERE LOWER(email) = 'bob@example.com';

-- This query would NOT use the index:
-- EXPLAIN ANALYZE SELECT user_id, username
-- FROM users
-- WHERE email = 'bob@example.com';

Apply Your Knowledge

Now that you've learned about Partial and Expression Indexes, let's test your understanding.

Lesson Summary

Great job! You've learned about two powerful advanced indexing techniques:

  • Partial Indexes: Index only a subset of rows based on a WHERE clause, saving space and speeding up writes.
  • Expression Indexes: Index the result of a function or expression, optimizing queries that use those functions in their conditions.

By using these targeted indexes, you can significantly improve the performance of specific, critical queries in your PostgreSQL database.

الأسئلة الشائعة

هل درس «الفهارس الجزئية وفهارس التعبيرات» مجاني؟

نعم — نص درس «الفهارس الجزئية وفهارس التعبيرات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PostgreSQL Performance & Query Optimization، انتقل إلى CoddyKit PRO. تتضمن دورة PostgreSQL Performance & Query Optimization 4 دروس في المجموع.

ماذا ستتعلم في «الفهارس الجزئية وفهارس التعبيرات»؟

تعلّموا إنشاء فهارس على مجموعة جزئية من الصفوف أو على ناتج تعبير لتحسين الأداء بشكل موجّه. تتمرن على PostgreSQL Performance & Query Optimization مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ PostgreSQL Performance & Query Optimization؟

لا تُشترط خبرة سابقة. PostgreSQL Performance & Query Optimization على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «الفهارس الجزئية وفهارس التعبيرات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس PostgreSQL Performance & Query Optimization هذا؟

نعم. كل درس في PostgreSQL Performance & Query Optimization يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. فهارس Hash وGIN وGiST
  2. الفهارس الجزئية وفهارس التعبيرات
  3. الفهارس المغطية وعمليات المسح بالفهرس فقط
  4. فهارس BRIN للبيانات التسلسلية الكبيرة
← العودة إلى PostgreSQL Performance & Query Optimization