professionalchacha/php-query-optimizer

PHP query performance analyzer

Maintainers

Package info

github.com/sahil512sk/query-optimizer

pkg:composer/professionalchacha/php-query-optimizer

Statistics

Installs: 16

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.0.0 2026-03-16 06:48 UTC

This package is auto-updated.

Last update: 2026-04-19 12:22:06 UTC


README

A PHP library for analyzing SQL queries and identifying potential performance issues.

Features

  • Analyzes SQL queries for common performance anti-patterns
  • Provides suggestions for query optimization
  • Extensible rule system
  • Command-line interface for quick analysis

Installation

composer require professionalchacha/php-query-optimizer

Or clone the repository:

git clone https://github.com/professionalchacha/php-query-optimizer.git
cd php-query-optimizer
composer install

Usage

After Installation (via Composer)

Windows Users:

# Method 1: Direct PHP execution (Recommended)
php vendor\bin\query-analyze.php path\to\your\file.php
php vendor\bin\query-analyze.php "SELECT * FROM users ORDER BY created_at"

# Method 2: Use package directly
php vendor\professionalchacha\php-query-optimizer\analyze-file.php path\to\file.php
php vendor\professionalchacha\php-query-optimizer\query-analyzer.php "SELECT * FROM users"

# Method 3: Use provided batch file
vendor-bin-query-analyze.bat path\to\your\file.php
vendor-bin-query-analyze.bat "SELECT * FROM users"

Linux/Mac Users:

# Method 1: Using vendor/bin (Recommended)
php vendor/bin/query-analyze.php path/to/your/file.php
php vendor/bin/query-analyze.php "SELECT * FROM users ORDER BY created_at"

# Method 2: Use package directly
php vendor/professionalchacha/php-query-optimizer/analyze-file.php path/to/file.php
php vendor/professionalchacha/php-query-optimizer/query-analyzer.php "SELECT * FROM users"

Method 2: Using Composer Script

# Add this to your composer.json scripts section:
# "query-analyze": "vendor/bin/query-analyze.php"

# Then run:
composer query-analyze path/to/your/file.php
composer query-analyze "SELECT * FROM users"

Method 3: Create Local Alias

# Create a local batch file (Windows)
echo @echo off > query-analyze.bat
echo php vendor\bin\query-analyze.php %%* >> query-analyze.bat

# Or create a local shell script (Linux/Mac)
echo '#!/bin/bash' > query-analyze
echo 'php vendor/bin/query-analyze.php "$@"' >> query-analyze
chmod +x query-analyze

# Then use:
./query-analyze path/to/your/file.php

Method 4: Global Setup (Advanced)

# Run setup script (requires admin rights)
php setup-global.bat  # Windows
bash setup-global.sh   # Linux/Mac

Alternative Commands

# Windows
php vendor\bin\analyze-file.php path\to\your\file.php
php vendor\bin\query-analyzer.php "SELECT * FROM users"

# Linux/Mac
php vendor/bin/analyze-file.php path/to/your/file.php
php vendor/bin/query-analyzer.php "SELECT * FROM users ORDER BY created_at"

Command Line (from source)

php query-analyze.php "SELECT * FROM users ORDER BY created_at"
php analyze-file.php path/to/your/file.php

Programmatic

<?php
require __DIR__ . '/vendor/autoload.php';

use ProfessionalChacha\PhpQueryOptimizer\QueryAnalyzer;

$analyzer = new QueryAnalyzer();
$analyzer->loadDefaultRules();

$result = $analyzer->analyze("SELECT * FROM users");
print_r($result);

Laravel Integration

Quick Setup (Recommended)

composer require professionalchacha/php-query-optimizer

Add to app/Console/Kernel.php:

protected $commands = [
    \ProfessionalChacha\PhpQueryOptimizer\Laravel\Commands\AnalyzeQueriesCommand::class,
];

Use immediately:

php artisan analyze:queries app/Http/Controllers/UserController.php
php artisan analyze:queries database/seeders/DatabaseSeeder.php
php artisan analyze:queries app/Models/User.php

Features:

  • 🎨 Beautiful, color-coded output with emojis
  • 📍 Line numbers and query types
  • 📊 Performance scoring with indicators
  • 📈 Summary reports
  • ⚙️ Configurable rules and thresholds

Troubleshooting

If you get "There are no commands defined in the 'analyze' namespace":

  1. Clear Laravel cache:

    php artisan config:clear
    php artisan cache:clear
    composer dump-autoload
  2. Use manual registration (recommended above)

For detailed setup options, see LARAVEL_MANUAL_SETUP.md.

Available Rules

  • SelectStarRule: Detects SELECT * usage
  • OrderByWithoutLimitRule: Detects ORDER BY without LIMIT
  • LikeWildcardRule: Detects leading wildcards in LIKE clauses
  • MissingWhereRule: Detects queries without WHERE clauses
  • JoinWithoutIndexRule: Detects potential unindexed joins

Testing

Run the test suite:

php test.php

License

MIT