PHPackages                             sekizlipenguen/laravel-index-analyzer - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. sekizlipenguen/laravel-index-analyzer

ActiveLibrary[Database &amp; ORM](/categories/database)

sekizlipenguen/laravel-index-analyzer
=====================================

Advanced package that automatically analyzes Laravel SQL queries and provides intelligent index suggestions to optimize database performance

050PHP

Since Jul 26Pushed 9mo agoCompare

[ Source](https://github.com/sekizlipenguen/laravel-index-analyzer)[ Packagist](https://packagist.org/packages/sekizlipenguen/laravel-index-analyzer)[ RSS](/packages/sekizlipenguen-laravel-index-analyzer/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

Laravel Index Analyzer
======================

[](#laravel-index-analyzer)

📊 Automatic SQL Index Suggestion System | Otomatik SQL Index Öneri Sistemi

[![Latest Stable Version](https://camo.githubusercontent.com/34e02faa87b29cac8ccfd772006d7dcecea68636a238476eb46b1c41e1b11959/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f73656b697a6c6970656e6775656e2f6c61726176656c2d696e6465782d616e616c797a65722e737667)](https://packagist.org/packages/sekizlipenguen/laravel-index-analyzer)[![Total Downloads](https://camo.githubusercontent.com/bfa946f6d434670db5e5197e83875d06cff90e896049d1859f1a8da40b68cf03/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f73656b697a6c6970656e6775656e2f6c61726176656c2d696e6465782d616e616c797a65722e737667)](https://packagist.org/packages/sekizlipenguen/laravel-index-analyzer)[![GitHub stars](https://camo.githubusercontent.com/d2c400565cf20f18fc947b200bff05b7f8de62ab96ecda765eb68d8937ae8d6f/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f73656b697a6c6970656e6775656e2f6c61726176656c2d696e6465782d616e616c797a65722e737667)](https://github.com/sekizlipenguen/laravel-index-analyzer/stargazers)[![License](https://camo.githubusercontent.com/a8a7386b5b7326a4670bf313774fcc0e0e75caa92c75adeca5a7539707edceef/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f73656b697a6c6970656e6775656e2f6c61726176656c2d696e6465782d616e616c797a65722e737667)](https://packagist.org/packages/sekizlipenguen/laravel-index-analyzer)

[![Laravel 9.x](https://camo.githubusercontent.com/c532a0456d444f24d52d5182a7501148227886bb0556aa020fb0258224f937fb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d392e782d7265642e737667)](https://laravel.com/docs/9.x)[![Laravel 10.x](https://camo.githubusercontent.com/540748966581100bddf2fb60b744c38e16e00ec667c5f22dd6ae6554a3a41693/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d31302e782d7265642e737667)](https://laravel.com/docs/10.x)[![Laravel 11.x](https://camo.githubusercontent.com/1cf7e76377e33c525ce7f5645f062caa61e32d7f2a143fa261c5cbce90820e67/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d31312e782d7265642e737667)](https://laravel.com/docs/11.x)[![Laravel 12.x](https://camo.githubusercontent.com/b72e0aa3b09f6ee9f1cd47f19792a8204408312803c6b277768a5d2c99ffd60c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d31322e782d7265642e737667)](https://laravel.com/docs/12.x)

[🇬🇧 English](#english) | [🇹🇷 Türkçe](#turkish)

🇬🇧 English
----------

[](#-english)

A package that collects all SQL queries used in Laravel-based projects through real user experience (including frontend navigation, AJAX requests), detects missing indexes, and provides SQL suggestions for them. This way, you can improve your database performance and make your application run faster.

### Features

[](#features)

- Simulates real user experience with browser integration
- Easy to use with automatic JS DebugBar
- Analyzes all SQL queries to detect missing indexes
- Intelligently analyzes JOIN, WHERE, ORDER BY, and GROUP BY clauses
- Provides ready-to-use SQL commands for suggested indexes
- Smart caching system that prevents re-analysis of the same queries
- Easy configuration (with .env and config file)
- Minimal system resource usage

### Installation

[](#installation)

```
composer require sekizlipenguen/laravel-index-analyzer
```

To publish the config file:

```
php artisan vendor:publish --provider="SekizliPenguen\IndexAnalyzer\IndexAnalyzerServiceProvider"
```

Screenshots
-----------

[](#screenshots)

### Dashboard

[](#dashboard)

[![Dashboard](screenshots/img.png)](screenshots/img.png)

### Scanning Process

[](#scanning-process)

[![Scanning Process](screenshots/img_2.png)](screenshots/img_2.png)

### Index Suggestions

[](#index-suggestions)

[![Index Suggestions](screenshots/img_1.png)](screenshots/img_1.png)

### Usage

[](#usage)

1. Add the following setting to your `.env` file:

```
INDEX_ANALYZER_ENABLED=true

```

2. It is recommended to use it in a development environment. When using it in a production environment, it is advised to set this to false.
3. There are two usage options:

    **A. Using DebugBar:**

    - Use the debugbar that appears at the bottom of your browser while visiting your pages
    - Click the "Start Scan" button to start automatic scanning
    - Navigate through as many pages of your application as possible (simulate normal user experience)
    - Access login-required pages, admin panels, and special routes by logging in
    - When all your navigation is complete, click "Extract Indexes" to view analysis results
    - You can directly copy the suggested SQL commands

    **B. Using Control Panel:**

    - Access the control panel by going to `/index-analyzer` (e.g., `https://yoursite.com/index-analyzer`)
    - Click "Start Scan" to start scanning automatic routes
    - Manually navigate through additional pages (especially important for login-required pages)
    - View index suggestions and SQL commands

### How It Works

[](#how-it-works)

1. **Query Collection**:

    - All SQL queries in your application are automatically captured
    - Open GET routes can be automatically scanned
    - When you manually navigate through login-required pages, queries on these pages are also recorded
    - All database queries are captured, including those in AJAX requests
    - Repeated queries are intelligently filtered
2. **Data Analysis**:

    - Collected queries are analyzed in detail
    - Columns in WHERE, JOIN, ORDER BY, and GROUP BY clauses are detected
    - Queries with high performance impact are identified
    - Classified according to repetition count and execution times
3. **Index Suggestion**:

    - The most appropriate index suggestions are created for frequently used columns with performance impact
    - Intelligent analysis for composite indexes
    - Inter-table relationships are taken into account
    - Conflicts with existing indexes are checked
4. **SQL Generation**:

    - Ready SQL commands are created for suggested indexes
    - Format that you can directly apply to your database is provided
    - Index naming is done automatically and according to standards

### Configuration

[](#configuration)

You can customize package behavior with the `config/index-analyzer.php` file:

```
return [
    // Enable/disable IndexAnalyzer (recommended to set to false in production)
    'enabled' => env('INDEX_ANALYZER_ENABLED', false),

    // Query data storage method (memory or file)
    'storage' => env('INDEX_ANALYZER_STORAGE', 'file'),

    // Log file path
    'log_path' => storage_path('logs/index-analyzer.log'),

    // Maximum log file size (10MB default)
    'max_log_size' => 10 * 1024 * 1024,

    // Route prefix
    'route_prefix' => 'index-analyzer',

    // Ignored tables (no suggestions will be created for these tables)
    'ignored_tables' => [
        'migrations',
        'jobs',
        'failed_jobs',
        'password_resets',
        'sessions',
        'personal_access_tokens',
        // You can add your own tables here
    ],

    // Settings for suggestions
    'suggestions' => [
        'min_query_time' => 0,  // Minimum query time in milliseconds
        'min_query_count' => 1, // Minimum query repeat count
    ],
];
```

### Performance Impact

[](#performance-impact)

This package is designed to be used in a development environment. To minimize performance impact:

- Uses smart caching to avoid re-recording the same queries
- Doesn't consume system resources when not needed
- File storage option reduces memory usage
- Not recommended for use in production, if used, set `INDEX_ANALYZER_ENABLED=false` in your `.env` file

### Examples

[](#examples)

#### Example Analysis Output

[](#example-analysis-output)

```
{
   "success": true,
   "suggestions": [
      {
         "table": "users",
         "columns": [
            "email",
            "status"
         ],
         "index_name": "users_email_status_idx"
      },
      {
         "table": "orders",
         "columns": [
            "user_id",
            "created_at"
         ],
         "index_name": "orders_user_id_created_at_idx"
      }
   ],
   "statements": [
      "ALTER TABLE `users` ADD INDEX `users_email_status_idx` (`email`,`status`);",
      "ALTER TABLE `orders` ADD INDEX `orders_user_id_created_at_idx` (`user_id`,`created_at`);"
   ]
}
```

🇹🇷 Türkçe
---------

[](#-türkçe)

Laravel tabanlı projelerde gerçek kullanıcı deneyimi (ön yüz gezinmeleri, AJAX istekleri dahil) üzerinden kullanılan tüm SQL sorgularını toplayan, eksik indeksleri tespit eden ve bunlar için SQL önerileri sunan bir paket. Bu sayede veritabanı performansınızı iyileştirebilir ve uygulamanızın daha hızlı çalışmasını sağlayabilirsiniz.

### Özellikler

[](#özellikler)

- Tarayıcı entegrasyonu ile gerçek kullanıcı deneyimini simüle eder
- Otomatik JS DebugBar ile kolay kullanım
- Tüm SQL sorgularını analiz ederek eksik indeksleri tespit eder
- JOIN, WHERE, ORDER BY ve GROUP BY cümlelerini akıllıca analiz eder
- Önerilen indeksler için hazır SQL komutları sunar
- Aynı sorguların tekrar analiz edilmesini önleyen akıllı önbellek sistemi
- Kolay yapılandırma (.env ve config dosyası ile)
- Minimum sistem kaynağı kullanımı

Kurulum
-------

[](#kurulum)

```
composer require sekizlipenguen/laravel-index-analyzer
```

Config dosyasını yayınlamak için:

```
php artisan vendor:publish --provider="SekizliPenguen\IndexAnalyzer\IndexAnalyzerServiceProvider"
```

Kullanım
--------

[](#kullanım)

1. `.env` dosyanıza aşağıdaki ayarı ekleyin:

```
INDEX_ANALYZER_ENABLED=true

```

2. Uygulamanızda geliştirme ortamında kullanmanız önerilir. Production ortamında kullanırken bu ayarı false yapmanız tavsiye edilir.
3. İki kullanım seçeneği vardır:

    **A. DebugBar ile kullanım:**

    - Tarayıcıda sayfalarınızı ziyaret ederken ekranın altında görünen debugbar'ı kullanın
    - "Tarama Başlat" butonu ile otomatik taramayı başlatın
    - Uygulamanın olabildiğince çok sayfasında gezinin (normal kullanıcı deneyimini simüle edin)
    - Giriş gerektiren sayfalara, admin panellerine, ve özel rotalara da giriş yaparak erişin
    - Tüm gezintileriniz bittiğinde "İndexleri Çıkar" butonuna tıklayarak analiz sonuçlarını görüntüleyin
    - Önerilen SQL komutlarını doğrudan kopyalayabilirsiniz

    **B. Kontrol Paneli ile kullanım:**

    - `/index-analyzer` adresine giderek kontrol paneline erişin (ör: `https://siteadi.com/index-analyzer`)
    - "Tarama Başlat" butonuna tıklayarak otomatik rotaları taramayı başlatın
    - Elle ek sayfalarda gezinti yapın (özellikle giriş gerektiren sayfalar için önemli)
    - İndeks önerilerini ve SQL komutlarını görüntüleyin

Nasıl Çalışır?
--------------

[](#nasıl-çalışır)

1. **Sorgu Toplama**:

    - Uygulamanızda gerçekleşen tüm SQL sorguları otomatik olarak yakalanır
    - Açık GET rotaları otomatik olarak taranabilir
    - Giriş gerektiren sayfaları manuel olarak gezdiğinizde bu sayfalardaki sorgular da kaydedilir
    - AJAX isteklerindeki sorgular dahil tüm veritabanı sorguları yakalanır
    - Tekrarlanan sorgular akıllıca filtrelenir
2. **Veri Analizi**:

    - Toplanan sorgular detaylı olarak analiz edilir
    - WHERE, JOIN, ORDER BY ve GROUP BY cümlelerindeki sütunlar tespit edilir
    - Performans etkisi yüksek olan sorgular belirlenir
    - Tekrar sayısı ve çalışma sürelerine göre sınıflandırılır
3. **İndeks Önerisi**:

    - Sık kullanılan ve performans etkisi olan sütunlar için en uygun indeks önerileri oluşturulur
    - Birleşik (composite) indeksler için akıllı analizler yapılır
    - Tablolar arası ilişkiler dikkate alınır
    - Mevcut indekslerle çakışmalar kontrol edilir
4. **SQL Üretimi**:

    - Önerilen indeksler için hazır SQL komutları oluşturulur
    - Doğrudan veritabanınıza uygulayabileceğiniz format sunulur
    - İndeks isimlendirmesi otomatik ve standartlara uygun şekilde yapılır

Yapılandırma
------------

[](#yapılandırma)

`config/index-analyzer.php` dosyası ile paket davranışını özelleştirebilirsiniz:

```
return [
    // IndexAnalyzer'ı aktif/pasif yapma (üretim ortamında false yapmanız önerilir)
    'enabled' => env('INDEX_ANALYZER_ENABLED', false),

    // Sorgu verilerinin depolanma yöntemi (memory veya file)
    'storage' => env('INDEX_ANALYZER_STORAGE', 'file'),

    // Log dosyası yolu
    'log_path' => storage_path('logs/index-analyzer.log'),

    // Maksimum log dosyası boyutu (10MB varsayılan)
    'max_log_size' => 10 * 1024 * 1024,

    // Rota öneki
    'route_prefix' => 'index-analyzer',

    // Yoksayılan tablolar (bu tablolar için öneri oluşturulmaz)
    'ignored_tables' => [
        'migrations',
        'jobs',
        'failed_jobs',
        'password_resets',
        'sessions',
        'personal_access_tokens',
        // Kendi tablolarınızı buraya ekleyebilirsiniz
    ],

    // Öneriler için ayarlar
    'suggestions' => [
        'min_query_time' => 0,  // Milisaniye cinsinden minimum sorgu süresi
        'min_query_count' => 1, // Minimum sorgu tekrar sayısı
    ],
];
```

Performans Etkisi
-----------------

[](#performans-etkisi)

Bu paket, geliştirme ortamında kullanılmak üzere tasarlanmıştır. Performans etkisini minimize etmek için:

- Aynı sorguları tekrar kaydetmemek için akıllı önbellek kullanır
- İhtiyaç duyulmadığında sistem kaynağı tüketmez
- Dosya depolaması seçeneği, bellek kullanımını azaltır
- Production ortamında kullanım önerilmez, kullanılacaksa `.env` dosyasında `INDEX_ANALYZER_ENABLED=false` ayarı yapılmalıdır

Örnekler
--------

[](#örnekler)

### Örnek Analiz Çıktısı

[](#örnek-analiz-çıktısı)

```
{
   "success": true,
   "suggestions": [
      {
         "table": "users",
         "columns": [
            "email",
            "status"
         ],
         "index_name": "users_email_status_idx"
      },
      {
         "table": "orders",
         "columns": [
            "user_id",
            "created_at"
         ],
         "index_name": "orders_user_id_created_at_idx"
      }
   ],
   "statements": [
      "ALTER TABLE `users` ADD INDEX `users_email_status_idx` (`email`,`status`);",
      "ALTER TABLE `orders` ADD INDEX `orders_user_id_created_at_idx` (`user_id`,`created_at`);"
   ]
}
```

Pratik Kullanım İpuçları
------------------------

[](#pratik-kullanım-i̇puçları)

**En Etkili Kullanım İçin**

1. **Kapsamlı Gezinti Yapın**:

    - Uygulamanızın mümkün olduğunca çok sayfasında gezinin
    - Admin paneli, üye sayfaları gibi giriş gerektiren alanlara mutlaka giriş yapın
    - Filtrelemeleri, aramaları ve AJAX ile yüklenen içerikleri test edin
    - Raporlama, listeleme gibi ağır sorgu içeren sayfaları ziyaret edin
2. **Gerçek Kullanıcı Senaryoları**:

    - Gerçek kullanıcıların yapacağı işlemleri simüle edin
    - Sipariş verme, kayıt olma, ürün arama gibi tipik işlemleri gerçekleştirin
    - Her türlü filtre ve sıralama seçeneğini deneyin
3. **Otomatik Tarayıcıyı Doğru Kullanın**:

    - Otomatik tarayıcı sadece açık (giriş gerektirmeyen) rotaları tarar
    - Giriş gerektiren sayfalar için manuel olarak giriş yapıp gezinmeniz gerekir
    - Her işlemden sonra indeks önerilerini kontrol edin

Sorun Giderme
-------------

[](#sorun-giderme)

**Tarayıcı taraması çalışmıyor**

- JavaScript konsolunda hata olup olmadığını kontrol edin
- Tarayıcınızın aynı kaynaktan JavaScript yüklemesine izin verdiğinden emin olun
- CORS politikalarının taramaya engel olmadığından emin olun

**Hiç sorgu kaydedilmiyor**

- `.env` dosyasında `INDEX_ANALYZER_ENABLED=true` ayarını kontrol edin
- Sorgu log klasörünün yazılabilir olduğundan emin olun
- Uygulama yetkilerini kontrol edin
- Laravel Debug Bar'ın yüklendiğinden emin olun

**Bazı sorgular analizde görünmüyor**

- `ignored_tables` ayarında ilgili tabloların olmadığından emin olun
- Çok hızlı çalışan sorgular için `min_query_time` değerini 0 olarak ayarlayın
- Bazı ORM sorguları gerçekte çalıştırılmamış olabilir (lazy loading)

Katkıda Bulunma
---------------

[](#katkıda-bulunma)

Katkılarınızı bekliyoruz! Lütfen PR göndermeden önce şunları yapın:

1. Testlerinizi yazın
2. Kodunuzu PSR-12 standartlarına göre biçimlendirin
3. Açıklayıcı commit mesajları kullanın

Lisans
------

[](#lisans)

MIT lisansı altında lisanslanmıştır. Detaylar için [LICENSE](LICENSE) dosyasına bakınız.

###  Health Score

18

—

LowBetter than 8% of packages

Maintenance40

Moderate activity, may be stable

Popularity9

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity14

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/715cdb6c7b83d00dbf1fa8528879f7e88925e4b6d0f97fb95ca3ea6cf3ab1cf2?d=identicon)[sekizlipenguen](/maintainers/sekizlipenguen)

---

Top Contributors

[![sekizlipenguen](https://avatars.githubusercontent.com/u/36849861?v=4)](https://github.com/sekizlipenguen "sekizlipenguen (49 commits)")

### Embed Badge

![Health badge](/badges/sekizlipenguen-laravel-index-analyzer/health.svg)

```
[![Health](https://phpackages.com/badges/sekizlipenguen-laravel-index-analyzer/health.svg)](https://phpackages.com/packages/sekizlipenguen-laravel-index-analyzer)
```

###  Alternatives

[doctrine/orm

Object-Relational-Mapper for PHP

10.2k285.3M6.2k](/packages/doctrine-orm)[jdorn/sql-formatter

a PHP SQL highlighting library

3.9k115.1M102](/packages/jdorn-sql-formatter)[illuminate/database

The Illuminate Database package.

2.8k52.4M9.4k](/packages/illuminate-database)[mongodb/mongodb

MongoDB driver library

1.6k64.0M546](/packages/mongodb-mongodb)[ramsey/uuid-doctrine

Use ramsey/uuid as a Doctrine field type.

90340.3M211](/packages/ramsey-uuid-doctrine)[reliese/laravel

Reliese Components for Laravel Framework code generation.

1.7k3.4M16](/packages/reliese-laravel)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
