Files
school-of-sre/level101/databases_sql/query_performance/index.html
2024-08-13 02:23:28 +00:00

6290 lines
127 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="canonical" href="https://linkedin.github.io/school-of-sre/level101/databases_sql/query_performance/">
<link rel="prev" href="../select_query/">
<link rel="next" href="../lab/">
<link rel="icon" href="../../../img/favicon.ico">
<meta name="generator" content="mkdocs-1.5.3, mkdocs-material-9.5.12">
<title>Query Performance - School Of SRE</title>
<link rel="stylesheet" href="../../../assets/stylesheets/main.7e359304.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../../../stylesheets/custom.css">
<script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#query-performance-improvement" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<script async defer data-domain="linkedin.github.io" src="https://tracking.eskratch.com/js/plausible.js"></script>
<script>document.addEventListener("DOMContentLoaded", function() {
if (document.getElementById("nav-2").checked!=true && document.getElementById("nav-3").checked!=true && window.innerWidth>1220){
document.getElementById("nav-2").checked=true;
document.getElementById("nav-3").checked=true;
}
});</script>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="header.title">
<a href="https://linkedin.github.io/school-of-sre/" title="School Of SRE" class="md-header__button md-logo" aria-label="School Of SRE">
<img src="../../../img/sos.png" alt="logo">
</a>
<!-- Button to open drawer -->
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<span class="md-header__topic md-ellipsis">
<a href="https://linkedin.github.io/school-of-sre/" title="School Of SRE" >
School Of SRE
</a>
</span>
<span class="md-header__topic md-ellipsis">
Query Performance
</span>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<!-- Determine classes -->
<!-- Navigation -->
<nav
class="md-nav md-nav--primary"
aria-label="Navigation"
data-md-level="0"
>
<!-- Repository information -->
<!-- Navigation list -->
<ul class="md-nav__list" data-md-scrollfix>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../.." class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Home
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_2"
checked
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_2"
id="__nav_2_label"
tabindex=""
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Level 101
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="1"
aria-labelledby="__nav_2_label"
aria-expanded="true"
>
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Level 101
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_2_1"
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_2_1"
id="__nav_2_1_label"
tabindex="0"
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Fundamentals Series
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="2"
aria-labelledby="__nav_2_1_label"
aria-expanded="false"
>
<label class="md-nav__title" for="__nav_2_1">
<span class="md-nav__icon md-icon"></span>
Fundamentals Series
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_2_1_1"
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_2_1_1"
id="__nav_2_1_1_label"
tabindex="0"
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Linux Basics
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="3"
aria-labelledby="__nav_2_1_1_label"
aria-expanded="false"
>
<label class="md-nav__title" for="__nav_2_1_1">
<span class="md-nav__icon md-icon"></span>
Linux Basics
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../linux_basics/intro/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Introduction
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../linux_basics/command_line_basics/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Command Line Basics
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../linux_basics/linux_server_administration/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Server Administration
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../linux_basics/conclusion/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Conclusion
</span>
<!-- Navigation link status -->
</a>
</li>
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_2_1_2"
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_2_1_2"
id="__nav_2_1_2_label"
tabindex="0"
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Git
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="3"
aria-labelledby="__nav_2_1_2_label"
aria-expanded="false"
>
<label class="md-nav__title" for="__nav_2_1_2">
<span class="md-nav__icon md-icon"></span>
Git
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../git/git-basics/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Git Basics
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../git/branches/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Working With Branches
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../git/github-hooks/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Github and Hooks
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../git/conclusion/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Conclusion
</span>
<!-- Navigation link status -->
</a>
</li>
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_2_1_3"
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_2_1_3"
id="__nav_2_1_3_label"
tabindex="0"
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Linux Networking
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="3"
aria-labelledby="__nav_2_1_3_label"
aria-expanded="false"
>
<label class="md-nav__title" for="__nav_2_1_3">
<span class="md-nav__icon md-icon"></span>
Linux Networking
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../linux_networking/intro/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Introduction
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../linux_networking/dns/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
DNS
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../linux_networking/udp/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
UDP
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../linux_networking/http/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
HTTP
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../linux_networking/tcp/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
TCP
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../linux_networking/ipr/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Routing
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../linux_networking/conclusion/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Conclusion
</span>
<!-- Navigation link status -->
</a>
</li>
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_2_2"
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_2_2"
id="__nav_2_2_label"
tabindex="0"
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Python and Web
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="2"
aria-labelledby="__nav_2_2_label"
aria-expanded="false"
>
<label class="md-nav__title" for="__nav_2_2">
<span class="md-nav__icon md-icon"></span>
Python and Web
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../python_web/intro/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Introduction
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../python_web/python-concepts/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Some Python Concepts
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../python_web/python-web-flask/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Python, Web and Flask
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../python_web/url-shorten-app/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
The URL Shortening App
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../python_web/sre-conclusion/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Conclusion
</span>
<!-- Navigation link status -->
</a>
</li>
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_2_3"
checked
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_2_3"
id="__nav_2_3_label"
tabindex="0"
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Data
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="2"
aria-labelledby="__nav_2_3_label"
aria-expanded="true"
>
<label class="md-nav__title" for="__nav_2_3">
<span class="md-nav__icon md-icon"></span>
Data
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_2_3_1"
checked
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_2_3_1"
id="__nav_2_3_1_label"
tabindex="0"
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Relational Databases
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="3"
aria-labelledby="__nav_2_3_1_label"
aria-expanded="true"
>
<label class="md-nav__title" for="__nav_2_3_1">
<span class="md-nav__icon md-icon"></span>
Relational Databases
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../intro/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Introduction
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../concepts/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Key Concepts
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../mysql/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
MySQL
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../innodb/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
InnoDB
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../backup_recovery/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Backup and Recovery
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../replication/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
MySQL Replication
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../operations/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Operational Concepts
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../select_query/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Select Query
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item md-nav__item--active">
<!-- State toggle -->
<input
class="md-nav__toggle md-toggle"
type="checkbox"
id="__toc"
/>
<!-- Hack: see partials/toc.html for more information -->
<!-- Navigation link to table of contents -->
<label class="md-nav__link md-nav__link--active" for="__toc">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Query Performance
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<a
href="./"
class="md-nav__link md-nav__link--active"
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Query Performance
</span>
<!-- Navigation link status -->
</a>
<!-- Table of contents -->
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#query-performance-improvement" class="md-nav__link">
<span class="md-ellipsis">
Query Performance Improvement
</span>
</a>
<nav class="md-nav" aria-label="Query Performance Improvement">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#the-slow-query-log" class="md-nav__link">
<span class="md-ellipsis">
The Slow Query Log
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#the-explain-plan" class="md-nav__link">
<span class="md-ellipsis">
The EXPLAIN Plan
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#creating-an-index" class="md-nav__link">
<span class="md-ellipsis">
Creating an Index
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<!-- Navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../lab/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Lab
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../conclusion/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Conclusion
</span>
<!-- Navigation link status -->
</a>
</li>
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_2_3_2"
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_2_3_2"
id="__nav_2_3_2_label"
tabindex="0"
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
NoSQL
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="3"
aria-labelledby="__nav_2_3_2_label"
aria-expanded="false"
>
<label class="md-nav__title" for="__nav_2_3_2">
<span class="md-nav__icon md-icon"></span>
NoSQL
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../databases_nosql/intro/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Introduction
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../databases_nosql/key_concepts/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Key Concepts
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../databases_nosql/further_reading/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Conclusion
</span>
<!-- Navigation link status -->
</a>
</li>
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_2_3_3"
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_2_3_3"
id="__nav_2_3_3_label"
tabindex="0"
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Message Queue
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="3"
aria-labelledby="__nav_2_3_3_label"
aria-expanded="false"
>
<label class="md-nav__title" for="__nav_2_3_3">
<span class="md-nav__icon md-icon"></span>
Message Queue
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../messagequeue/intro/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Introduction
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../messagequeue/key_concepts/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Key Concepts
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../messagequeue/further_reading/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Conclusion
</span>
<!-- Navigation link status -->
</a>
</li>
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_2_3_4"
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_2_3_4"
id="__nav_2_3_4_label"
tabindex="0"
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Big Data
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="3"
aria-labelledby="__nav_2_3_4_label"
aria-expanded="false"
>
<label class="md-nav__title" for="__nav_2_3_4">
<span class="md-nav__icon md-icon"></span>
Big Data
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../big_data/intro/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Introduction
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../big_data/evolution/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Evolution and Architecture of Hadoop
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../big_data/tasks/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Conclusion
</span>
<!-- Navigation link status -->
</a>
</li>
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_2_4"
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_2_4"
id="__nav_2_4_label"
tabindex="0"
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Systems Design
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="2"
aria-labelledby="__nav_2_4_label"
aria-expanded="false"
>
<label class="md-nav__title" for="__nav_2_4">
<span class="md-nav__icon md-icon"></span>
Systems Design
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../systems_design/intro/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Introduction
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../systems_design/scalability/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Scalability
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../systems_design/availability/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Availability
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../systems_design/fault-tolerance/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Fault Tolerance
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../systems_design/conclusion/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Conclusion
</span>
<!-- Navigation link status -->
</a>
</li>
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_2_5"
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_2_5"
id="__nav_2_5_label"
tabindex="0"
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Metrics and Monitoring
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="2"
aria-labelledby="__nav_2_5_label"
aria-expanded="false"
>
<label class="md-nav__title" for="__nav_2_5">
<span class="md-nav__icon md-icon"></span>
Metrics and Monitoring
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../metrics_and_monitoring/introduction/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Introduction
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../metrics_and_monitoring/command-line_tools/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Command-line Tools
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../metrics_and_monitoring/third-party_monitoring/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Third-party Monitoring
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../metrics_and_monitoring/alerts/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Proactive Monitoring with Alerts
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../metrics_and_monitoring/best_practices/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Best Practices for Monitoring
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../metrics_and_monitoring/observability/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Observability
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../metrics_and_monitoring/conclusion/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Conclusion
</span>
<!-- Navigation link status -->
</a>
</li>
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_2_6"
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_2_6"
id="__nav_2_6_label"
tabindex="0"
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Security
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="2"
aria-labelledby="__nav_2_6_label"
aria-expanded="false"
>
<label class="md-nav__title" for="__nav_2_6">
<span class="md-nav__icon md-icon"></span>
Security
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../security/intro/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Introduction
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../security/fundamentals/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Fundamentals of Security
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../security/network_security/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Network Security
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../security/threats_attacks_defences/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Threat, Attacks & Defences
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../security/writing_secure_code/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Writing Secure code
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../security/conclusion/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Conclusion
</span>
<!-- Navigation link status -->
</a>
</li>
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_3"
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_3"
id="__nav_3_label"
tabindex=""
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Level 102
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="1"
aria-labelledby="__nav_3_label"
aria-expanded="false"
>
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Level 102
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_3_1"
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_3_1"
id="__nav_3_1_label"
tabindex="0"
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Linux Intermediate
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="2"
aria-labelledby="__nav_3_1_label"
aria-expanded="false"
>
<label class="md-nav__title" for="__nav_3_1">
<span class="md-nav__icon md-icon"></span>
Linux Intermediate
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/linux_intermediate/introduction/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Introduction
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/linux_intermediate/package_management/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Package Management
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/linux_intermediate/storage_media/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Storage Media
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/linux_intermediate/archiving_backup/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Archiving and Backup
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/linux_intermediate/introvim/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Introduction to Vim
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/linux_intermediate/bashscripting/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Bash Scripting
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/linux_intermediate/conclusion/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Conclusion
</span>
<!-- Navigation link status -->
</a>
</li>
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_3_2"
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_3_2"
id="__nav_3_2_label"
tabindex="0"
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Linux Advanced
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="2"
aria-labelledby="__nav_3_2_label"
aria-expanded="false"
>
<label class="md-nav__title" for="__nav_3_2">
<span class="md-nav__icon md-icon"></span>
Linux Advanced
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_3_2_1"
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_3_2_1"
id="__nav_3_2_1_label"
tabindex="0"
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Containerization And Orchestration
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="3"
aria-labelledby="__nav_3_2_1_label"
aria-expanded="false"
>
<label class="md-nav__title" for="__nav_3_2_1">
<span class="md-nav__icon md-icon"></span>
Containerization And Orchestration
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/containerization_and_orchestration/intro/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Introduction
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/containerization_and_orchestration/intro_to_containers/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Introduction To Containers
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/containerization_and_orchestration/containerization_with_docker/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Containerization With Docker
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/containerization_and_orchestration/orchestration_with_kubernetes/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Orchestration With Kubernetes
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/containerization_and_orchestration/conclusion/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Conclusion
</span>
<!-- Navigation link status -->
</a>
</li>
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_3_2_2"
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_3_2_2"
id="__nav_3_2_2_label"
tabindex="0"
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
System Calls and Signals
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="3"
aria-labelledby="__nav_3_2_2_label"
aria-expanded="false"
>
<label class="md-nav__title" for="__nav_3_2_2">
<span class="md-nav__icon md-icon"></span>
System Calls and Signals
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/system_calls_and_signals/intro/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Introduction
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/system_calls_and_signals/signals/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Signals
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/system_calls_and_signals/system_calls/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
System Calls
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/system_calls_and_signals/conclusion/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Conclusion
</span>
<!-- Navigation link status -->
</a>
</li>
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_3_3"
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_3_3"
id="__nav_3_3_label"
tabindex="0"
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Networking
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="2"
aria-labelledby="__nav_3_3_label"
aria-expanded="false"
>
<label class="md-nav__title" for="__nav_3_3">
<span class="md-nav__icon md-icon"></span>
Networking
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/networking/introduction/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Introduction
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/networking/security/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Security
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/networking/scale/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Scale
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/networking/rtt/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
RTT
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/networking/infrastructure-features/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Infrastructure Services
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/networking/conclusion/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Conclusion
</span>
<!-- Navigation link status -->
</a>
</li>
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_3_4"
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_3_4"
id="__nav_3_4_label"
tabindex="0"
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
System Design
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="2"
aria-labelledby="__nav_3_4_label"
aria-expanded="false"
>
<label class="md-nav__title" for="__nav_3_4">
<span class="md-nav__icon md-icon"></span>
System Design
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/system_design/intro/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Introduction
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/system_design/large-system-design/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Large System Design
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/system_design/scaling/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Scaling
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/system_design/scaling-beyond-the-datacenter/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Scaling Beyond the Data Center
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/system_design/resiliency/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Resiliency
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/system_design/conclusion/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Conclusion
</span>
<!-- Navigation link status -->
</a>
</li>
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_3_5"
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_3_5"
id="__nav_3_5_label"
tabindex="0"
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
System Troubleshooting and Performance Improvements
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="2"
aria-labelledby="__nav_3_5_label"
aria-expanded="false"
>
<label class="md-nav__title" for="__nav_3_5">
<span class="md-nav__icon md-icon"></span>
System Troubleshooting and Performance Improvements
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/system_troubleshooting_and_performance/introduction/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Introduction
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/system_troubleshooting_and_performance/troubleshooting/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Troubleshooting
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/system_troubleshooting_and_performance/important-tools/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Important Tools
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/system_troubleshooting_and_performance/performance-improvements/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Performance Improvements
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/system_troubleshooting_and_performance/troubleshooting-example/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Troubleshooting Example
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/system_troubleshooting_and_performance/conclusion/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Conclusion
</span>
<!-- Navigation link status -->
</a>
</li>
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<!-- Determine all nested items that are index pages -->
<!-- Navigation tabs -->
<!-- Render 1st level items with nested items as sections -->
<!-- Navigation pruning -->
<!-- Nested navigation item -->
<li class="md-nav__item md-nav__item--nested">
<!-- Determine checked and indeterminate state -->
<!-- Active checkbox expands items contained within nested section -->
<input
class="md-nav__toggle md-toggle "
type="checkbox"
id="__nav_3_6"
/>
<!-- Toggle to expand nested items -->
<label
class="md-nav__link"
for="__nav_3_6"
id="__nav_3_6_label"
tabindex="0"
>
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Continuous Integration and Continuous Delivery
</span>
<!-- Navigation link status -->
<span class="md-nav__icon md-icon"></span>
</label>
<!-- Toggle to expand nested items with link to index page -->
<!-- Nested navigation -->
<nav
class="md-nav"
data-md-level="2"
aria-labelledby="__nav_3_6_label"
aria-expanded="false"
>
<label class="md-nav__title" for="__nav_3_6">
<span class="md-nav__icon md-icon"></span>
Continuous Integration and Continuous Delivery
</label>
<ul class="md-nav__list" data-md-scrollfix>
<!-- Nested navigation item -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/continuous_integration_and_continuous_delivery/introduction/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Introduction
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/continuous_integration_and_continuous_delivery/introduction_to_cicd/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
What is CI/CD?
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/continuous_integration_and_continuous_delivery/cicd_brief_history/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Brief History
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/continuous_integration_and_continuous_delivery/continuous_integration_build_pipeline/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Continuous Integration
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/continuous_integration_and_continuous_delivery/continuous_delivery_release_pipeline/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Continuous Delivery and Deployment
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/continuous_integration_and_continuous_delivery/jenkins_cicd_pipeline_hands_on_lab/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
CI/CD Pipeline - Hands-on
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../level102/continuous_integration_and_continuous_delivery/conclusion/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Conclusion
</span>
<!-- Navigation link status -->
</a>
</li>
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
</ul>
</nav>
<!-- Pruned navigation item -->
</li>
<!-- Currently active page -->
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../CONTRIBUTING/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Contribute
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../CODE_OF_CONDUCT/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
Code of Conduct
</span>
<!-- Navigation link status -->
</a>
</li>
<!-- Determine classes -->
<!-- Determine active page for paginated views -->
<!-- Navigation item with nested items -->
<li class="md-nav__item">
<a href="../../../sre_community/" class="md-nav__link">
<!-- Navigation link icon -->
<!-- Navigation link title -->
<span class="md-ellipsis">
SRE Community
</span>
<!-- Navigation link status -->
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#query-performance-improvement" class="md-nav__link">
<span class="md-ellipsis">
Query Performance Improvement
</span>
</a>
<nav class="md-nav" aria-label="Query Performance Improvement">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#the-slow-query-log" class="md-nav__link">
<span class="md-ellipsis">
The Slow Query Log
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#the-explain-plan" class="md-nav__link">
<span class="md-ellipsis">
The EXPLAIN Plan
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#creating-an-index" class="md-nav__link">
<span class="md-ellipsis">
Creating an Index
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1>Query Performance</h1>
<h3 id="query-performance-improvement">Query Performance Improvement</h3>
<p>Query Performance is a very crucial aspect of relational databases. If not tuned correctly, the select queries can become slow and painful for the application, and for the MySQL server as well. The important task is to identify the slow queries and try to improve their performance by either rewriting them or creating proper indexes on the tables involved in it.</p>
<h4 id="the-slow-query-log">The Slow Query Log</h4>
<p>The slow query log contains SQL statements that take a longer time to execute than set in the config parameter <code>long_query_time</code>. These queries are the candidates for optimization. There are some good utilities to summarize the slow query logs like, <code>mysqldumpslow</code> (provided by MySQL itself), <code>pt-query-digest</code> (provided by Percona), etc. Following are the config parameters that are used to enable and effectively catch slow queries</p>
<table>
<thead>
<tr>
<th>Variable</th>
<th>Explanation</th>
<th>Example value</th>
</tr>
</thead>
<tbody>
<tr>
<td>slow_query_log</td>
<td>Enables or disables slow query logs</td>
<td>ON</td>
</tr>
<tr>
<td>slow_query_log_file</td>
<td>The location of the slow query log</td>
<td>/var/lib/mysql/mysql-slow.log</td>
</tr>
<tr>
<td>long_query_time</td>
<td>Threshold time. The query that takes longer than this time is logged in slow query log</td>
<td>5</td>
</tr>
<tr>
<td>log_queries_not_using_indexes</td>
<td>When enabled with the slow query log, the queries which do not make use of any index are also logged in the slow query log even though they take less time than long_query_time.</td>
<td>ON</td>
</tr>
</tbody>
</table>
<p>So, for this section, we will be enabling <code>slow_query_log</code>, <code>long_query_time</code> will be kept to <strong>0.3 (300 ms)</strong>, and <code>log_queries_not_using</code> index will be enabled as well.</p>
<p>Below are the queries that we will execute on the <code>employees</code> database.</p>
<ol>
<li>
<p><code>SELECT * FROM employees WHERE last_name = 'Koblick'</code></p>
</li>
<li>
<p><code>SELECT * FROM salaries WHERE salary &gt;= 100000</code></p>
</li>
<li>
<p><code>SELECT * FROM titles WHERE title = 'Manager'</code></p>
</li>
<li>
<p><code>SELECT * FROM employees WHERE year(hire_date) = 1995</code></p>
</li>
<li>
<p><code>SELECT year(e.hire_date), max(s.salary) FROM employees e JOIN salaries s ON e.emp_no=s.emp_no GROUP BY year(e.hire_date)</code></p>
</li>
</ol>
<p>Now, queries <strong>1</strong>, <strong>3</strong> and <strong>4</strong> executed under 300ms but if we check the slow query logs, we will find these queries logged as they are not using any of the index. Queries <strong>2</strong> and <strong>5</strong> are taking longer than 300ms and also not using any index.</p>
<p>Use the following command to get the summary of the slow query log:</p>
<pre><code class="language-shell">mysqldumpslow /var/lib/mysql/mysql-slow.log
</code></pre>
<p><img alt="slow query log analysis" src="../images/mysqldumpslow_out.png" title="slow query log analysis" /></p>
<p>There are some more queries in the snapshot that were along with the queries mentioned. <code>mysqldumpslow</code> replaces actual values that were used by <em>N</em> (in case of numbers) and <em>S</em> (in case of strings). That can be overridden by <code>-a</code> option, however, that will increase the output lines if different values are used in similar queries.</p>
<h4 id="the-explain-plan">The EXPLAIN Plan</h4>
<p>The <code>EXPLAIN</code> command is used with any query that we want to analyze. It describes the query execution plan, how MySQL sees and executes the query. <code>EXPLAIN</code> works with <code>SELECT</code>, <code>INSERT</code>, <code>UPDATE</code> and <code>DELETE</code> statements. It tells about different aspects of the query like, how tables are joined, indexes used or not, etc. The important thing here is to understand the basic <code>EXPLAIN</code> plan output of a query to determine its performance. </p>
<p>Let's take the following query as an example,</p>
<pre><code class="language-shell">mysql&gt; EXPLAIN SELECT * FROM salaries WHERE salary = 100000;
+----+-------------+----------+------------+------+---------------+------+---------+------+---------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+----------+------------+------+---------------+------+---------+------+---------+----------+-------------+
| 1 | SIMPLE | salaries | NULL | ALL | NULL | NULL | NULL | NULL | 2838426 | 10.00 | Using where |
+----+-------------+----------+------------+------+---------------+------+---------+------+---------+----------+-------------+
1 row in set, 1 warning (0.00 sec)
</code></pre>
<p>The key aspects to understand in the above output are:</p>
<ul>
<li><strong>Partitions</strong> - the number of partitions considered while executing the query. It is only valid if the table is partitioned.</li>
<li><strong>Possible_keys</strong> - the list of indexes that were considered during creation of the execution plan.</li>
<li><strong>Key</strong> - the index that will be used while executing the query.</li>
<li><strong>Rows</strong> - the number of rows examined during the execution.</li>
<li><strong>Filtered</strong> - the percentage of rows that were filtered out of the rows examined. The maximum and most optimized result will have 100 in this field. </li>
<li><strong>Extra</strong> - this tells some extra information on how MySQL evaluates, whether the query is using only <code>WHERE</code> clause to match target rows, any index or temporary table, etc.</li>
</ul>
<p>So, for the above query, we can determine that there are no partitions, there are no candidate indexes to be used and so no index is used at all, over 2M rows are examined and only 10% of them are included in the result, and lastly, only a <code>WHERE</code> clause is used to match the target rows.</p>
<h4 id="creating-an-index">Creating an Index</h4>
<p>Indexes are used to speed up selecting relevant rows for a given column value. Without an index, MySQL starts with the first row and goes through the entire table to find matching rows. If the table has too many rows, the operation becomes costly. With indexes, MySQL determines the position to start looking for the data without reading the full table.</p>
<p>A primary key is also an index which is also the fastest and is stored along with the table data. Secondary indexes are stored outside of the table data and are used to further enhance the performance of SQL statements. Indexes are mostly stored as B-Trees, with some exceptions like spatial indexes use R-Trees and memory tables use hash indexes.</p>
<p>There are 2 ways to create indexes:</p>
<ul>
<li>While creating a table - if we know beforehand the columns that will drive the most number of <code>WHERE</code> clauses in <code>SELECT</code> queries, then we can put an index over them while creating a table.</li>
<li>Altering a Table - To improve the performance of a troubling query, we create an index on a table which already has data in it using <code>ALTER</code> or <code>CREATE INDEX</code> command. This operation does not block the table but might take some time to complete depending on the size of the table.</li>
</ul>
<p>Lets look at the query that we discussed in the previous section. Its clear that scanning over 2M records is not a good idea when only 10% of those records are actually in the resultset. </p>
<p>Hence, we create an index on the salary column of the salaries table.</p>
<pre><code class="language-SQL">CREATE INDEX idx_salary ON salaries(salary)
</code></pre>
<p>OR</p>
<pre><code class="language-SQL">ALTER TABLE salaries ADD INDEX idx_salary(salary)
</code></pre>
<p>And the same explain plan now looks like this:</p>
<pre><code class="language-shell">mysql&gt; EXPLAIN SELECT * FROM salaries WHERE salary = 100000;
+----+-------------+----------+------------+------+---------------+------------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+----------+------------+------+---------------+------------+---------+-------+------+----------+-------+
| 1 | SIMPLE | salaries | NULL | ref | idx_salary | idx_salary | 4 | const | 13 | 100.00 | NULL |
+----+-------------+----------+------------+------+---------------+------------+---------+-------+------+----------+-------+
1 row in set, 1 warning (0.00 sec)
</code></pre>
<p>Now the index used is <code>idx_salary</code>, the one we recently created. The index actually helped examine only 13 records and all of them are in the resultset. Also, the query execution time is also reduced from over 700ms to almost negligible. </p>
<p>Lets look at another example. Here, we are searching for a specific combination of <code>first_name</code> and <code>last_name</code>. But, we might also search based on <code>last_name</code> only.</p>
<pre><code class="language-shell">mysql&gt; EXPLAIN SELECT * FROM employees WHERE last_name = 'Dredge' AND first_name = 'Yinghua';
+----+-------------+-----------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-----------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| 1 | SIMPLE | employees | NULL | ALL | NULL | NULL | NULL | NULL | 299468 | 1.00 | Using where |
+----+-------------+-----------+------------+------+---------------+------+---------+------+--------+----------+-------------+
1 row in set, 1 warning (0.00 sec)
</code></pre>
<p>Now only 1% record out of almost 300K is the resultset. Although the query time is particularly quick as we have only 300K records, this will be a pain if the number of records are over millions. In this case, we create an index on <code>last_name</code> and <code>first_name</code>, not separately, but a composite index including both the columns. </p>
<pre><code class="language-SQL">CREATE INDEX idx_last_first ON employees(last_name, first_name)
</code></pre>
<pre><code class="language-shell">mysql&gt; EXPLAIN SELECT * FROM employees WHERE last_name = 'Dredge' AND first_name = 'Yinghua';
+----+-------------+-----------+------------+------+----------------+----------------+---------+-------------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-----------+------------+------+----------------+----------------+---------+-------------+------+----------+-------+
| 1 | SIMPLE | employees | NULL | ref | idx_last_first | idx_last_first | 124 | const,const | 1 | 100.00 | NULL |
+----+-------------+-----------+------------+------+----------------+----------------+---------+-------------+------+----------+-------+
1 row in set, 1 warning (0.00 sec)
</code></pre>
<p>We chose to put <code>last_name</code> before <code>first_name</code> while creating the index as the optimizer starts from the leftmost prefix of the index while evaluating the query. For example, if we have a 3-column index like <code>idx(c1, c2, c3)</code>, then the search capability of the index follows - (c1), (c1, c2) or (c1, c2, c3) i.e. if your <code>WHERE</code> clause has only <code>first_name</code>, this index wont work.</p>
<pre><code class="language-shell">mysql&gt; EXPLAIN SELECT * FROM employees WHERE first_name = 'Yinghua';
+----+-------------+-----------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-----------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| 1 | SIMPLE | employees | NULL | ALL | NULL | NULL | NULL | NULL | 299468 | 10.00 | Using where |
+----+-------------+-----------+------------+------+---------------+------+---------+------+--------+----------+-------------+
1 row in set, 1 warning (0.00 sec)
</code></pre>
<p>But, if you have only the <code>last_name</code> in the <code>WHERE</code> clause, it will work as expected.</p>
<pre><code class="language-shell">mysql&gt; EXPLAIN SELECT * FROM employees WHERE last_name = 'Dredge';
+----+-------------+-----------+------------+------+----------------+----------------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-----------+------------+------+----------------+----------------+---------+-------+------+----------+-------+
| 1 | SIMPLE | employees | NULL | ref | idx_last_first | idx_last_first | 66 | const | 200 | 100.00 | NULL |
+----+-------------+-----------+------------+------+----------------+----------------+---------+-------+------+----------+-------+
1 row in set, 1 warning (0.00 sec)
</code></pre>
<p>For another example, use the following queries:</p>
<pre><code class="language-SQL">CREATE TABLE employees_2 LIKE employees;
CREATE TABLE salaries_2 LIKE salaries;
ALTER TABLE salaries_2 DROP PRIMARY KEY;
</code></pre>
<p>We made copies of <code>employees</code> and <code>salaries</code> tables without the Primary Key of <code>salaries</code> table to understand an example of <code>SELECT</code> with <code>JOIN</code>.</p>
<p>When you have queries like the below, it becomes tricky to identify the pain point of the query.</p>
<pre><code class="language-shell">mysql&gt; SELECT e.first_name, e.last_name, s.salary, e.hire_date FROM employees_2 e JOIN salaries_2 s ON e.emp_no=s.emp_no WHERE e.last_name='Dredge';
1860 rows in set (4.44 sec)
</code></pre>
<p>This query is taking about 4.5 seconds to complete with 1860 rows in the resultset. Lets look at the Explain plan. There will be 2 records in the Explain plan as 2 tables are used in the query.</p>
<pre><code class="language-shell">mysql&gt; EXPLAIN SELECT e.first_name, e.last_name, s.salary, e.hire_date FROM employees_2 e JOIN salaries_2 s ON e.emp_no=s.emp_no WHERE e.last_name='Dredge';
+----+-------------+-------+------------+--------+------------------------+---------+---------+--------------------+---------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+--------+------------------------+---------+---------+--------------------+---------+----------+-------------+
| 1 | SIMPLE | s | NULL | ALL | NULL | NULL | NULL | NULL | 2837194 | 100.00 | NULL |
| 1 | SIMPLE | e | NULL | eq_ref | PRIMARY,idx_last_first | PRIMARY | 4 | employees.s.emp_no | 1 | 5.00 | Using where |
+----+-------------+-------+------------+--------+------------------------+---------+---------+--------------------+---------+----------+-------------+
2 rows in set, 1 warning (0.00 sec)
</code></pre>
<p>These are in order of evaluation, i.e. <code>salaries_2</code> will be evaluated first and then <code>employees_2</code> will be joined to it. As it looks like, it scans almost all the rows of <code>salaries_2</code> table and tries to match the <code>employees_2</code> rows as per the <code>JOIN</code> condition. Though <code>WHERE</code> clause is used in fetching the final resultset, but the index corresponding to the <code>WHERE</code> clause is not used for the <code>employees_2</code> table. </p>
<p>If the join is done on two indexes which have the same data-types, it will always be faster. So, lets create an index on the <code>emp_no</code> column of <code>salaries_2</code> table and analyze the query again.</p>
<pre><code class="language-SQL">CREATE INDEX idx_empno ON salaries_2(emp_no)
</code></pre>
<pre><code class="language-shell">mysql&gt; EXPLAIN SELECT e.first_name, e.last_name, s.salary, e.hire_date FROM employees_2 e JOIN salaries_2 s ON e.emp_no=s.emp_no WHERE e.last_name='Dredge';
+----+-------------+-------+------------+------+------------------------+----------------+---------+--------------------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+------------------------+----------------+---------+--------------------+------+----------+-------+
| 1 | SIMPLE | e | NULL | ref | PRIMARY,idx_last_first | idx_last_first | 66 | const | 200 | 100.00 | NULL |
| 1 | SIMPLE | s | NULL | ref | idx_empno | idx_empno | 4 | employees.e.emp_no | 9 | 100.00 | NULL |
+----+-------------+-------+------------+------+------------------------+----------------+---------+--------------------+------+----------+-------+
2 rows in set, 1 warning (0.00 sec)
</code></pre>
<p>Now, not only did the index help the optimizer to examine only a few rows in both tables, it reversed the order of the tables in evaluation. The <code>employees_2</code> table is evaluated first and rows are selected as per the index respective to the <code>WHERE</code> clause. Then, the records are joined to <code>salaries_2</code> table as per the index used due to the <code>JOIN</code> condition. The execution time of the query came down <strong>from 4.5s to 0.02s</strong>.</p>
<pre><code class="language-shell">mysql&gt; SELECT e.first_name, e.last_name, s.salary, e.hire_date FROM employees_2 e JOIN salaries_2 s ON e.emp_no=s.emp_no WHERE e.last_name='Dredge'\G
1860 rows in set (0.02 sec)
</code></pre>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright 2020 LinkedIn Corporation. All Rights Reserved. Licensed under the Creative Commons Attribution 4.0 International Public License
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-social">
<a href="https://github.com/linkedin/school-of-sre" target="_blank" rel="noopener" title="github.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.sections"], "search": "../../../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../../../assets/javascripts/bundle.c8d2eff1.min.js"></script>
</body>
</html>