sql >> Database >  >> RDS >> Mysql

Grote tabellen en analyse in MySql

Op weg naar 'respectabel ', is 2 Millions-rijen nog steeds een relatief klein formaat voor een tabel. (En daarom is een snellere prestatie doorgaans mogelijk)

Zoals je hebt ontdekt, zijn de front-end wildcards bijzonder inefficiënt en we zullen hier een oplossing voor moeten vinden als dat gebruik gebruikelijk is voor jouw toepassing.

Het kan zijn dat u niet over de juiste set indexen beschikt . Voordat ik verder ga, wil ik echter benadrukken dat, hoewel indexen doorgaans de DBMS-prestaties verbeteren met allerlei soorten SELECT-instructies, dit systematisch een negatief effect heeft op de prestaties van "CUD" -bewerkingen (d.w.z. met de SQL CREATE/INSERT, UPDATE , VERWIJDER werkwoorden, d.w.z. de zoekopdrachten die schrijven naar de database in plaats van alleen lezen ernaar toe). In sommige gevallen kan de negatieve invloed van indexen op "schrijf"-query's erg groot zijn.

Mijn reden om met name de ambivalente aard van indexen te benadrukken, is dat het erop lijkt dat uw toepassing een behoorlijke hoeveelheid gegevens verzamelt als een normaal onderdeel van zijn werking, en u moet letten op mogelijke verslechtering naarmate de INSERT-query's worden vertraagd . Een mogelijk alternatief is om de dataverzameling uit te voeren in een relatief kleine tabel/database, met geen of zeer weinig indexen, en de data uit deze invoerdatabase regelmatig te importeren naar een database waar de eigenlijke datamining plaatsvindt. (Nadat ze zijn geïmporteerd, kunnen de rijen worden verwijderd uit de "invoerdatabase", waardoor deze klein en snel blijft voor de INSERT-functie.)

Een andere zorg/vraag gaat over de breedte van een rij in de casttabel (het aantal kolommen en de som van de breedtes van deze kolommen). Slechte prestaties kunnen te maken hebben met het feit dat rijen te breed zijn, wat resulteert in te weinig rijen in de bladknooppunten van de tabel, en dus een dieper dan noodzakelijke boomstructuur.

Terug naar de indexen...
met het oog op de weinige vragen in de vraag, lijkt het erop dat u baat zou kunnen hebben bij een ip + notitie-index (een index die op zijn minst met deze twee sleutels in deze volgorde is gemaakt). Een volledige analyse van de indexsituatie en eerlijk gezegd een mogelijke beoordeling van het databaseschema kan hier niet worden gedaan (niet genoeg info voor één...) om te zien welke database-indexen kunnen helpen bij deze gevallen. Met het mySQL-commando EXPLAIN kan inzicht worden verkregen in hoe bepaalde zoekopdrachten worden afgehandeld, in eerste instantie of nadat index(en) zijn toegevoegd.

Normalisatie OF demormalisatie (of zelfs een combinatie van beide!), is vaak ook een haalbaar idee om de prestaties tijdens mijnbouwactiviteiten te verbeteren.



  1. Verschil tussen lokale en globale tijdelijke tabellen in SQL Server

  2. MySql randomiseert de laatste 10 rijen

  3. Niet-Engelse letters bestellen in MySQL

  4. SQL - Hoe te transponeren?