<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged index</title>
<link>https://coderlegion.com/tag/index</link>
<description>Powered by Question2Answer</description>
<item>
<title>MySQL Indexing: Slash Query Times by 96%</title>
<link>https://coderlegion.com/21109/mysql-indexing-slash-query-times-by-96</link>
<description>
&lt;p&gt;&amp;lt;!-- ========== SCHEMAS ========== --&amp;gt;

&amp;lt;!-- FAQPage schema (generated from translation data) --&amp;gt;


&amp;lt;!-- WebSite schema --&amp;gt;


&amp;lt;!-- LocalBusiness schema --&amp;gt;



?&amp;gt;

&amp;lt;!-- Organization schema --&amp;gt;


&amp;lt;!-- BreadcrumbList schema (headline from translation) --&amp;gt;


&amp;lt;!-- CommunicateAction schema --&amp;gt;


&amp;lt;!-- ========== ARTICLE CONTENT ========== --&amp;gt;
&lt;/p&gt;&lt;h1&gt;MySQL Indexing: Slash Query Times by Up to 96%&lt;/h1&gt;
&lt;div class=&quot;post-meta&quot;&gt;
    &lt;span class=&quot;post-date&quot;&gt;November 2025&lt;/span&gt;
    &lt;span class=&quot;post-read&quot;&gt;14 min read&lt;/span&gt;
&lt;/div&gt;

&lt;p class=&quot;intro&quot;&gt;&lt;/p&gt;&lt;p&gt;I&amp;rsquo;m Jacob Campbell, and the single biggest backend speed win I see is also the most overlooked: indexing. Without the right index, MySQL reads every row in a table to answer a query; with one, it jumps straight to the rows it needs. The difference is routinely a query dropping from a few hundred milliseconds to single digits &amp;mdash; in real terms I&amp;rsquo;ve taken a 340 ms query down to 8 ms. Here&amp;rsquo;s how indexes work and how to find the ones you&amp;rsquo;re missing.&lt;/p&gt;

&lt;h2&gt;&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SET GLOBAL slow_query_log = 1;
SET GLOBAL long_query_time = 0.5;  -- log queries slower than 0.5 seconds
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;EXPLAIN SELECT * FROM products WHERE category_id = 5 AND price &amp;lt; 100;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;&lt;/h2&gt;

&lt;h3&gt;&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;CREATE INDEX idx_user_id ON orders (user_id);&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-- Slow: 2 seconds, scans 50,000 rows
SELECT * FROM products WHERE category_id = 5 AND price &amp;lt; 100;

-- Add composite index (order matters!)
CREATE INDEX idx_category_price ON products (category_id, price);

-- Now: 30ms, scans 127 rows&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;

&lt;h3&gt;&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-- Query only needs id and name
SELECT id, name FROM products WHERE category_id = 5;

-- Covering index
CREATE INDEX idx_category_id_name ON products (category_id, name);

-- EXPLAIN will show &quot;Using index&quot; in Extra column&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SELECT * FROM products 
WHERE category_id = 12 
  AND brand_id IN (3,7,9) 
  AND price BETWEEN 50 AND 200 
ORDER BY price LIMIT 24;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;CREATE INDEX idx_category_brand_price ON products (category_id, brand_id, price);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-- If you frequently query postmeta by meta_key and meta_value
ALTER TABLE wp_postmeta ADD INDEX idx_meta_key_value (meta_key, meta_value(100));&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;&lt;/h2&gt;
&lt;ul&gt;
    &lt;/ul&gt;

&lt;h2&gt;&lt;/h2&gt;
&lt;ul&gt;
    &lt;/ul&gt;

&lt;h2&gt;&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;CREATE INDEX idx_city_price_beds_type ON properties (city_id, price, bedrooms, property_type);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;ul&gt;
    &lt;/ul&gt;

&lt;h2&gt;&lt;/h2&gt;

&lt;h3&gt;&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt;

&lt;h3&gt;&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt;

&lt;h3&gt;&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt;

&lt;h3&gt;&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SELECT * FROM sys.schema_unused_indexes;
SELECT * FROM sys.schema_redundant_indexes;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;

&lt;div class=&quot;article-cta&quot;&gt;
    &lt;a href=&quot;/contact&quot;&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;&lt;small&gt;&lt;em&gt;&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;
</description>
<category>Other</category>
<guid isPermaLink="true">https://coderlegion.com/21109/mysql-indexing-slash-query-times-by-96</guid>
<pubDate>Wed, 08 Jul 2026 07:45:45 +0000</pubDate>
</item>
</channel>
</rss>