In deze zelfstudie behandelen we enkele basisprincipes van indexeren. Als onderdeel van de MySQL-serie introduceren we de mogelijkheden van MySQL-indexering en de rol die het speelt bij het optimaliseren van databaseprestaties. Liquid Web raadt aan een DBA te raadplegen voordat u wijzigingen aanbrengt in uw toepassing op productieniveau.
Wat is indexeren?
Indexering is een krachtige structuur in MySQL die kan worden gebruikt om de snelste responstijden van veelvoorkomende vragen te krijgen. MySQL-query's bereiken efficiëntie door een kleinere tabel, een index genaamd, te genereren uit een opgegeven kolom of reeks kolommen. Deze kolommen, een sleutel genaamd, kunnen worden gebruikt om uniciteit af te dwingen. Hieronder ziet u een eenvoudige visualisatie van een voorbeeldindex met twee kolommen als sleutel.
+------+----------+----------+
| ROW | COLUMN_1 | COLUMN_2 |
+------+----------+----------+
| 1 | data1 | data2 |
+------+----------+----------+
| 2 | data1 | data1 |
+------+----------+----------+
| 3 | data1 | data1 |
+------+----------+----------+
| 4 | data1 | data1 |
+------+----------+----------+
| 5 | data1 | data1 |
+------+----------+----------+
Query's gebruiken indexen om de beoogde gegevens te identificeren en op te halen, zelfs als het een combinatie van sleutels is. Zonder een index resulteert het uitvoeren van diezelfde query in een inspectie van elke rij op de benodigde gegevens. Indexeren levert een snelkoppeling op, met veel snellere querytijden op uitgebreide tabellen. Een analogie met leerboeken kan een andere veelgebruikte manier zijn om te visualiseren hoe indexen werken.
Wanneer indexeren inschakelen?
Indexeren is alleen voordelig voor grote tabellen met regelmatig geraadpleegde informatie. Om bijvoorbeeld door te gaan met onze leerboek-analogie:het heeft weinig zin om een kinderverhalenboek te indexeren met slechts een dozijn pagina's. Het is efficiënter om gewoon het boek te lezen om elk voorkomen van het woord 'schildpad' te vinden dan om indexen op te zetten en bij te houden, naar die indexen te zoeken en vervolgens elke aangeboden pagina te bekijken. In de computerwereld vertegenwoordigen die extra taken rond indexeren verspilde bronnen die beter zouden zijn gebruikt door niet te indexeren.
Zonder indexen, wanneer tabellen tot enorme proporties groeien, lijden responstijden onder query's die gericht zijn op die stompe tabellen. Inefficiënte zoekopdrachten manifesteren zich in latentie binnen de applicatie- of websiteprestaties. We identificeren deze latentie gewoonlijk met behulp van de MySQL-functie voor langzame querylogboeken. U vindt meer details over het gebruik van de logfunctie voor langzame query's in het eerste artikel in deze serie:MySQL-prestaties:het identificeren van lange zoekopdrachten.
Zodra een kolossale tabel zijn kantelpunt bereikt, bereikt deze het potentieel voor downtime voor applicaties en websites . Het uitvoeren van routinematige evaluaties voor een groeiende database zorgt voor optimale databaseprestaties en omzeilt de inherente onderbrekingen van lange query's.
MySQL Indexing Voordelen vs. Nadelen
Er zijn voor- en nadelen aan het gebruik van MySQL-indexering, en we zullen de belangrijke voor- en nadelen ter overweging bespreken. Deze aspecten zullen u helpen te beslissen of indexeren een geschikte keuze is voor uw situatie.
Welke informatie indexeert men?
Selecteren wat u wilt indexeren is waarschijnlijk het meest uitdagende onderdeel van het indexeren van uw databases. Bepalen wat belangrijk genoeg is om te indexeren en wat goedaardig genoeg is om niet te indexeren. Over het algemeen werkt indexeren het beste op die kolommen die het onderwerp zijn van de WHERE-clausules in uw veelgebruikte zoekopdrachten. Bekijk de volgende vereenvoudigde tabel:
ID, TITLE, LAST_NAME, FIRST_NAME, MAIDEN_NAME, DOB, GENDER, AGE, DESCRIPTION, HISTORY, ETC...
Als uw zoekopdrachten afhankelijk zijn van het testen van de WHERE-clausule met LAST_NAME en FIRST_NAME, dan zou indexering met deze twee kolommen de reactietijd van de query aanzienlijk verlengen. Als uw zoekopdrachten gebaseerd zijn op een eenvoudige ID-lookup, is indexeren op ID een betere keuze.
Deze voorbeelden zijn slechts een rudimentair voorbeeld en er zijn verschillende soorten indexeringsstructuren ingebouwd in MySQL. De volgende MySQL-pagina bespreekt dit soort indexen in meer detail en is een aanrader voor iedereen die overweegt te indexeren:Hoe MySQL indexen gebruikt
Wat is een unieke index?
Een ander punt van overweging bij het evalueren van welke kolommen als sleutel in uw index moeten dienen, is of u de UNIQUE-beperking moet gebruiken. Door de UNIQUE-beperking in te stellen, wordt uniciteit afgedwongen op basis van de geconfigureerde indexeringssleutel. Zoals bij elke sleutel, kan dit een enkele kolom zijn of een aaneenschakeling van meerdere kolommen. De functie van deze beperking zorgt ervoor dat er geen dubbele vermeldingen in de tabel zijn op basis van de geconfigureerde sleutel.
Wat is een primaire sleutelindex?
Net zo vaak aangeroepen als de UNIQUE-beperking, wordt de PRIMARY KEY gebruikt om indexen te optimaliseren. Deze beperking zorgt ervoor dat de aangewezen PRIMARY KEY geen null-waarde kan hebben. Als gevolg hiervan treedt een prestatieverbetering op bij het draaien op een InnoDB-opslagengine voor de betreffende tabel. Deze boost is te danken aan de manier waarop InnoDB gegevens fysiek opslaat, waarbij rijen met null-waarde in de sleutel worden geplaatst in een niet-aaneengesloten volgorde met rijen met waarden. Als u deze beperking inschakelt, worden de rijen van de tabel in aaneengesloten volgorde gehouden voor snellere reacties.
Indexen beheren
Nu zullen we enkele basisprincipes behandelen van het manipuleren van indexen met behulp van de MySQL-syntaxis. In voorbeelden zullen we het maken, verwijderen en vermelden van indexen opnemen. Houd er rekening mee dat deze voorbeelden tijdelijke aanduidingen bevatten voor de specifieke zoekwoorden. Deze trefwoorden spreken van nature voor zich en zijn daarom gemakkelijk te lezen, en hieronder vindt u een overzicht ervan.
Indexen weergeven/weergeven
Tabellen kunnen meerdere indexen hebben. Het beheren van indexen vereist onvermijdelijk dat u de bestaande indexen in een tabel kunt weergeven. De syntaxis voor het bekijken van een index staat hieronder.
SHOW INDEX FROM tableName;
Indexen maken
Het maken van indexen heeft een eenvoudige syntaxis. De moeilijkheid is om te bepalen welke kolommen moeten worden geïndexeerd en of het afdwingen van uniciteit noodzakelijk is. Hieronder laten we zien hoe u indexen maakt met en zonder een PRIMAIRE SLEUTEL en UNIEKE beperkingen.
Zoals eerder vermeld, kunnen tabellen meerdere indexen hebben. Meervoudig indexeren is handig voor het maken van indexen die zijn afgestemd op de vragen die uw applicatie of website nodig heeft. De standaardinstellingen laten maximaal 16 indexen per tabel toe. Verhoog dit aantal, maar is over het algemeen meer dan nodig is. Indexen kunnen worden gemaakt tijdens het maken van een tabel of later als aanvullende indexen aan de tabel worden toegevoegd. We zullen beide methoden hieronder bespreken.
Voorbeeld:een tabel maken met een standaardindex
CREATE TABLE tableName (
ID int,
LName varchar(255),
FName varchar(255),
DOB varchar(255),
LOC varchar(255),
INDEX ( ID )
);
Voorbeeld:maak een tabel met unieke index en primaire sleutel
CREATE TABLE tableName (
ID int,
LName varchar(255),
FName varchar(255),
DOB varchar(255),
LOC varchar(255),
PRIMARY KEY (ID),
UNIQUE INDEX ( ID )
);
Voorbeeld:een index toevoegen aan een bestaande tabel
CREATE INDEX indexName ON tableName (ID, LName, FName, LOC);
Voorbeeld:een index toevoegen aan een bestaande tabel met primaire sleutel
CREATE UNIQUE INDEX indexName ON tableName (ID, LName, FName, LOC);
Indexen verwijderen
Bij het beheren van indexen kan het nodig zijn om enkele te verwijderen. Het verwijderen van indexen is ook een heel eenvoudig proces, zie onderstaand voorbeeld:
DROP INDEX indexName ON tableName;
Er zijn veel manieren om uw database te optimaliseren voor echte efficiëntie. Als u meer wilt weten of de typen zoekmachines wilt converteren die beschikbaar zijn in MySQL, lees dan onze MyISAM vs. InnoDB-tutorial. Of als u goed functionerende databases nodig heeft, bekijk dan onze MySQL-productpagina om verschillende opties te bekijken.