İçeriğe geç
sql

MySQL Index Performans Sorguları

MySQL index performansını analiz etmek için kullanışlı sorgular. Kullanılmayan index'ler, yavaş sorgular ve EXPLAIN analizi.

By Tolgahan · · 203 görüntülenme
sql
-- 1. Tablodaki index'leri listele
SHOW INDEX FROM products;

-- 2. EXPLAIN ile sorgu planını analiz et
EXPLAIN ANALYZE
SELECT p.*, c.name AS category_name
FROM products p
JOIN categories c ON p.category_id = c.id
WHERE p.status = 'published'
  AND p.price > 100
ORDER BY p.created_at DESC
LIMIT 20;

-- 3. Kullanılmayan index'leri bul (MySQL 8.0+)
SELECT
    object_schema AS db_name,
    object_name AS table_name,
    index_name,
    count_star AS total_access
FROM performance_schema.table_io_waits_summary_by_index_usage
WHERE index_name IS NOT NULL
  AND count_star = 0
  AND object_schema = 'myapp'
ORDER BY object_name;

-- 4. Yavaş sorguları bul
SELECT
    digest_text AS query_pattern,
    count_star AS exec_count,
    ROUND(avg_timer_wait / 1000000000, 2) AS avg_ms,
    ROUND(sum_timer_wait / 1000000000, 2) AS total_ms,
    sum_rows_examined AS rows_scanned
FROM performance_schema.events_statements_summary_by_digest
WHERE schema_name = 'myapp'
ORDER BY avg_timer_wait DESC
LIMIT 10;

-- 5. Composite index oluştur (sık kullanılan sorgu için)
CREATE INDEX idx_products_status_price_created
    ON products(status, price, created_at DESC);

-- 6. Covering index (sorgunun ihtiyaç duyduğu tüm kolonlar)
CREATE INDEX idx_products_listing
    ON products(status, created_at DESC, id, title, price, category_id);

-- 7. Full-text index (arama için)
ALTER TABLE products ADD FULLTEXT INDEX ft_products_search (title, description);

-- Kullanım:
SELECT * FROM products
WHERE MATCH(title, description) AGAINST('spring boot' IN BOOLEAN MODE);
Bu snippet'i göm
<iframe src="https://tolgahan.dev/snippets/mysql-index-performans-sorgulari/embed" width="100%" height="400" frameborder="0"></iframe>
Paylaş: