Ohjelmistokehityksen menetelmät
  • Ohjelmistokehityksen menetelmät ja käytänteet
  • Tavoitteet
  • Työkalut
  • Toimeksiannot
    • Projektityön rajaukset ja toimeksiannot
    • Palkanlaskenta
    • Kilometrikorvaus
    • Laskutus
    • Laskun perintä
  • Ketterä ohjelmistokehitys
    • Agile esimerkki, sykli
    • Agile, Tuotteen tehtävälista
    • Agile, Käyttäjätarina ja käyttötapaus
    • Agile muu materiaali ja lähteitä
    • Agile termit (scrum)
  • Versionhallinta
    • Sanasto Git
    • Opas Gitin perusteisiin
    • Git perusteet 101
    • Git perusteet 102
    • Git perusteet 103
    • Git perusteet 104
    • Git perusteet 105
    • Git perusteet 106
    • Git perusteet 107
    • Git perusteet 108
    • Git muu materiaali ja lähteet
  • Yksikkötestaus
    • Ohjelmistotestauksen periaateet
    • NUnit lisääminen VS2019
    • NUnit perusteet 101
    • NUnit perusteet 102
    • NUnit perusteet 103
    • NUnit perusteet 104
    • NUnit perusteet 105
    • NUnit perusteet 106
    • NUnit muu materiaali ja lähteitä
    • TDD perusteet 101
    • TDD perusteet 102
    • TDD perusteet 103
    • TDD muu materiaali ja lähteitä
  • UML mallinnuskieli
    • Johdanto
  • Relaatiotietokannat
    • Johdanto
    • Sanasto
    • Mysql perusteet -videosarja
    • Pää- ja viiteavaimet
    • ER kaaviot
    • Viite-eheys ja ACID
    • SQL JOIN -lauseke
    • Normalisointi
    • SQL View
    • Tehtävä 001 Tietokannan suunnittelu
    • Indeksointi
      • Hitaat hakukyselyt
  • SQL harjoitukset ja esimerkit
    • Esimerkkitietokannan käyttöönotto
    • Mysql perusteet 101
    • Mysql perusteet 102
      • mysql-perusteet-102-vastaukset
    • Mysql perusteet 103
      • mysql-perusteet-103-vastaukset
    • Mysql perusteet 104
      • mysql-perusteet-104-vastaukset
    • Mysql perusteet 105
      • mysql-perusteet-105-vastaukset
    • Mysql perusteet 106
      • mysql-perusteet-106-vastaukset
    • SQL hakukyselyjä (VANHAT)
    • SQL harjoitukset syksy 2021
      • Vastaukset SQL harjoitukset syksy 2021
  • Miten yrittäjänä voin hyötyä ohjelmistokehityksen ostamisesta?
    • TL;DR
  • Toimeksiannot (2019/01)
    • Toimeksianto 2019/01
    • Käytänteet ja menetelmät
    • Konsoliohjelman refaktorointia
  • SCRUM harjoitustyö (2020/01)
    • Harjoitustyön sisältö
    • Harjoitustyö: Matkalasku
  • Toimeksiannot (2019/02)
    • Toimeksianto 2019/02
  • Toimeksiannot (2018/01)
    • Projekti 2018/01
    • Projekti 2018/01 Perjantaille 14.9
    • Projekti 2018/01 Käyttötapauksesta työtehtäviin
    • Projekti 2018/01 Ohjelmoinnin aloittaminen
    • Projekti 2018/01 TDD esimerkki
  • Harjoitteet (keskeneräiset)
    • Käyttäjätarinat
    • Pariohjelmointi
    • Versionhallinta
    • Testivetoinen kehitys
    • Jatkuva integraatio
    • Inkrementaalinen dokumentointi
Powered by GitBook
On this page
  • Esimerkki
  • Algoritmit
  • B-tree (B-puu)
  • Käytännön esimerkki
  • Mitä indeksejä tietokannassa on?
  • Esimerkki 01
  • Lähteet
  1. Relaatiotietokannat

Indeksointi

Mitä tarkoitetaan tietokantojen indeksoinnilla.

PreviousTehtävä 001 Tietokannan suunnitteluNextHitaat hakukyselyt

Last updated 5 years ago

Indeksillä tarkoitetaan tiedon rakennetta, jonka tarkoituksena on nopeuttaa relaatiotietokantojen hakuja, jotta järjestelmä palauttaa haetut tiedot nopeammin. Vaikuttaa myös tietokannan suorituskykyyn. Käytännössä indeksi on uudelleen järjestettyä tietoa, joka vastaa paremmin haluttuun hakuun. Tietokanta ei kuitenkaan tallenna samaa tietoa uudelleen vaan käyttää viittauksia alkuperäiseen tietoon.

Esimerkki

Algoritmit

B-tree (B-puu)

Käytännön esimerkki

Seuraavia asioita voit kokeilla, jos luot itsellesi testitietokannan githubissa olevien ohjeiden mukaisesti. Testitietokannassa on miljoonia rivejä, joten se on hieman suurempi kuin muut esimerkit.

Mitä indeksejä tietokannassa on?

Jos et tunne käsiteltävää tietokantaa. Seuraava SQL kysely auttaa sinua löytämään kaikki siinä käytössä olevat indeksit.

SELECT DISTINCT TABLE_NAME, INDEX_NAME 
FROM INFORMATION_SCHEMA.STATISTICS 
WHERE TABLE_SCHEMA = 'employees' -- employees on siis tietokannan nimi tässä.

-- Yhden taulun indeksit voi hakea seuraavalla komennolla:
SHOW INDEX FROM employees;

Kun käytetään SELECT hakua, se suoritetaan yksi komento kerrallaan. Hakujen nopeuteen vaikuttavat useat siinä esiintyvät avainsanat. (join order, group, where jne) Mysql pyrkii käyttämään apuna indeksejä, joilla se voi rajata jo alussa pois rivejä mitä ei tarvitse käydä läpi. Usein WHERE ehdossa esitellyt ehdot ovat tärkeimpiä haun nopeuteen liittyen. Väärällä tavalla kirjoitetut haut voivat olla raskaita tietokannalle ja niiden suorittaminen vie aikaa.

Esimerkki 01

-- Haetaan työntekijöiden suurin palkka niiltä
-- joiden työnimike on Technique Leader sekä
-- etunimi tai sukunimi alkaa Emi -merkeillä.
SELECT 
    em.emp_no, 
    MAX(sa.salary),
    em.first_name,
    em.last_name
FROM salaries as sa
LEFT JOIN employees as em USING(emp_no)
LEFT JOIN titles as ti using(emp_no)
WHERE ti.title like 'Technique Leader'
and (em.first_name like 'Emi%' or em.last_name like 'Emi%')
GROUP BY em.emp_no

-- Sama kysely käyttäen EXPLAIN komentoa
EXPLAIN SELECT 
    em.emp_no, 
    MAX(sa.salary),
    em.first_name,
    em.last_name
FROM salaries as sa
LEFT JOIN employees as em USING(emp_no)
LEFT JOIN titles as ti using(emp_no)
WHERE ti.title like 'Technique Leader'
and (em.first_name like 'Emi%' or em.last_name like 'Emi%')
GROUP BY em.emp_no
	
-- Komentojen indeksien luontiin
ALTER TABLE `employees`.`employees` ADD INDEX `ix_employees_firstname` (`first_name`);
ALTER TABLE `employees`.`employees` ADD INDEX `ix_employees_lastname` (`last_name`);

Lähteet

Testitietokanta ladattavissa ja siihen liittyvää dokumentointia .

https://github.com/nyluntu/test_db
https://dev.mysql.com/doc/employee/en/
Database Indexes ExplainedEssential SQL
Database Indexes ExplainedEssential SQL
MySQL :: MySQL 8.0 Reference Manual :: 8.3.9 Comparison of B-Tree and Hash Indexes
Logo
Database indexWikipedia
Logo
Logo
https://d117h1jjiq768j.cloudfront.net/images/default-source/default-album/tutorialimages-album/odbc-album/ruseindxa.gif?sfvrsn=1
https://en.wikipedia.org/wiki/B-tree#/media/File:B-tree.svg
Employees tietokannan indeksit
Logo