Testování výkonnosti databází Database performance testing
Bakalářská práce David Švamberk Vedoucí práce: Mgr. Miloš Prokýšek Jihočeská univerzita v Českých Budějovicích Pedagogická fakulta Katedra informatiky Rok 2010
Prohlášení Prohlašuji, že svoji bakalářskou práci jsem vypracoval samostatně pouze s použitím pramenů a literatury uvedených v seznamu citované literatury. Prohlašuji, že v souladu s § 47b zákona č. 111/1998 Sb. v platném znění souhlasím se zveřejněním své bakalářské práce, a to v nezkrácené podobě fakultou elektronickou cestou ve veřejně přístupné části databáze STAG provozované Jihočeskou univerzitou v Českých Budějovicích na jejích internetových stránkách, a to se zachováním mého autorského práva k odevzdanému textu této kvalifikační práce. Souhlasím dále s tím, aby toutéž elektronickou cestou byly v souladu s uvedeným ustanovením zákona č. 111/1998 Sb. zveřejněny posudky školitele a oponentů práce i záznam o průběhu a výsledku obhajoby kvalifikační práce. Rovněž souhlasím s porovnáním textu mé kvalifikační práce s databází kvalifikačních prací Theses.cz provozovanou Národním registrem vysokoškolských kvalifikačních prací a systémem na odhalování plagiátů.
V Českých Budějovicích dne 12.12.2010 Podpis studenta: Švamberk
Anotace Tato bakalářská práce se zabývá testováním výkonnosti databázových platforem. Hlavním cílem je vytvoření vlastních nástrojů pro generování pokusných databází a nástrojů pro testování výkonu různých platforem. Testovací, respektive měřící nástroje jsou následně aplikovány na vybrané databázové platformy a výsledky těchto měření znázorňují grafy a tabulky, vytvořené z vyhodnocených a následně zpracovaných naměřených hodnot.
Abstract This bachelor thesis deals with the testing of performance database platforms. The main objective is to create custom tools to generate test databases and tools for performance testing of various platforms. Testing or measuring tools are then applied to the selected database platforms and the results of these measurements display the graphs and tables generated from the assessed and then processed measured values.
Poděkování Rád bych poděkoval vedoucímu mé bakalářské práce panu Mgr. Miloši Prokýškovi za podporu, cenné rady a čas strávený při konzultacích. Dále bych chtěl poděkovat také panu Ing. Jaromíru Adámkovi za dřívější teoretické i praktické rady, které mi rovněž velice pomohly při zpracovávání zadaného tématu.
Obsah 1
ÚVOD ...................................................................................................... 6
2
TEORETICKÁ ČÁST ........................................................................... 8 2.1
VÝZKUMNÉ OTÁZKY .............................................................................................8
2.2
MYSQL SEVER 5.1 ............................................................................................. 11
2.2.1
Organizace a struktura entit .........................................................................11
2.2.2
Oddíly ............................................................................................................13
2.2.3
Optimalizace a vykonávání dotazů ................................................................ 14
2.3 2.3.1
Organizace a struktura entit .........................................................................18
2.3.2
Oddíly ............................................................................................................20
2.3.3
Optimalizace a vyřizování dotazů .................................................................21
2.4
ORACLE DATABASE 10G ..................................................................................... 25
2.4.1
Organizace a struktura entit .........................................................................25
2.4.2
Oddíly ............................................................................................................27
2.4.3
Optimalizace a vyřizování dotazů .................................................................27 PRAKTICKÁ ČÁST............................................................................ 36
3 3.1
METODIKA ..........................................................................................................36
3.1.1
Generator ......................................................................................................37
3.1.2
Connector ......................................................................................................39
3.1.3
Master ...........................................................................................................41
3.2 4
MICROSOFT SQL SERVER 2005 ..........................................................................18
VÝSLEDKY ..........................................................................................................45 ZÁVĚR ................................................................................................. 55
Úvod
6
1 Úvod Jak již název napovídá, tato práce se zabývá databázovými platformami a jejich výkonem. Pojem databázová platforma je velice široký. Pokrytí celého spektra databázových serverů by nutně vedlo k zobecnění a vynucené univerzálnosti všech zde zpracovaných poznatků a skutečností. Z tohoto důvodu je práce zaměřena jen na relační databázové servery, a to konkrétně na MySQL, Microsoft SQL (dále MSSQL) a Oracle. Toto omezení výzkumného pole umožňuje podrobnější popis zmíněných platforem a jednotlivá měření mohou být zaměřena právě na problematiku relačních databází, které se svými vlastnostmi velmi liší například od objektově orientovaných databází. Hlavním cílem této práce je porovnání výkonu vybraných databázových platforem na základě provedeného experimentu, který se skládá z několika dílčích testů. Výkon je v práci reprezentován časem, potřebným k vyřízení sql dotazů, zasílaných na zmíněné databázové servery. Pro měření tohoto času je použita vlastní měřící aplikace, vytvořená ve vývojovém prostředí Microsoft Visual Studio v jazyce C# na platformě .NET. Problematika výkonu databázových serverů je v dnešní době velmi sledovaným tématem. Stále rychleji se zvětšují objemy dat uložených v databázích, což znamená zvýšení nároků na servery. Z tohoto důvodu je práce zaměřena na měření, která se pokoušejí zjišťovat efektivnost některých optimalizačních technik a také se snaží zkoumat odezvu serverů při zatížení, které simuluje praktické nasazení. Výsledné grafy naznačují některé výhody a nevýhody použitých platforem. Není zde jednoznačně zmíněno, že nějaká konkrétní platforma je nejhorší či nejlepší. Jsou tu pouze stanoveny měřící metody, které jsou následně aplikovány na vybrané databázové servery. První část práce je teoretická a zahrnuje východiska pro vytváření měřících metod a generátoru náhodných hodnot. Tato část obsahuje výzkumné otázky, ve kterých jsou naznačeny základní principy ověřování funkce optimalizátoru a
Úvod 7 rychlosti DB serveru, využité pro měření. Dále je zde popis použitých platforem, jejich specifika a některé odlišné funkce. Pozornost je také věnována fyzickému uložení dat do tabulek, způsobům indexace a objasnění role optimalizace dotazů a kroků, které se provádí během vyřizování dotazu. Druhá část je praktická a skládá se z metodiky práce a dále z výsledků měření. Metodika popisuje měřící aplikaci, funkci jednotlivých částí a měřící metody, založené na výzkumných otázkách. Výsledky pak obsahují graficky zpracované naměřené hodnoty a zodpovězení výzkumných otázek v konfrontaci s naměřenými hodnotami.
Teoretická část
8
2 Teoretická část 2.1 Výzkumné otázky
Jak velký vliv mají indexy na rychlost vykonání příkazu SELECT?
Ovlivňuje datový typ sloupce a obsah záznamu rychlost vyhledávání v neindexovaném a indexovaném sloupci?
Jaké je zatížení serveru a na něm závislý čas vykonání dotazu při konkurenčním přístupu?
Má počet spojení, realizovaných v dotazu, vliv na rychlost vyhodnocení dotazu?
Záleží na pořadí tabulek v dotazu?
Jak velký vliv mají indexy na rychlost vykonání příkazu SELECT? Na základě informací o optimalizátoru dotazů by mělo mít použití indexů značný vliv na čas, který server potřebuje, než uživateli vrátí požadovaná data. Optimalizátor však nemusí vyhledávat v indexu, i když je prohledáván indexovaný sloupec. Tato situace může nastat v případě, že jsou požadovány všechny řádky tabulky nebo jejich většina a server může ignorovat indexy a provést skenování celé tabulky. Existuje-li index, jehož klíčový sloupec je seřazen pomocí ORDER BY a jsou-li vyžadovány všechny řádky tabulky, provede se skenování indexů nikoli, celé tabulky. Na tyto skutečnosti je třeba brát ohled při sestavování dotazů, využitých pro měření. Je důležité, aby při porovnávání rychlosti dotazu SELECT nad indexovaným a neindexovaným sloupcem bylo vyhledáváno skutečně v indexech. Pak by výsledky měření měly vycházet totožně.
Teoretická část 9 Ovlivňuje datový typ sloupce a obsah záznamu rychlost vyhledávání v neindexovaném a indexovaném sloupci? Pro možné urychlení vyhledávání v rozsáhlých databázích s velkým množstvím záznamů je důležité vědět, zda datový typ nebo i obsah daného sloupce ovlivňuje dobu vyhledávání. Předešlá otázka je zaměřena na rozdíl mezi indexovaným sloupcem a sloupcem bez indexu. Oproti tomu tato otázka poukazuje na rozdíl mezi sloupci s různými datovými typy v rámci indexů a v rámci neindexovaných sloupců. V jedné tabulce se vytvoří totožné sloupce, a to dva pro každý typ. Sloupce s textovými řetězci se pak dále rozdělí na dvě skupiny. Jedna skupina je reprezentována alfabeticky seřazenými záznamy a druhá náhodně generovanými řetězci. Nad každým sloupcem z této dvojice se vytvoří index a budou zkoumány rozdíly ve vyhledávání.
Jaké je zatíţení serveru, respektive čas vykonání dotazu na něm závislý, při konkurenčním přístupu více uţivatelů? Sql server, nasazený v prostředí, které vyžaduje přístup více uživatelů k téže databázi ve stejném čase, by měl být logicky více zatěžován. Toto zatížení serveru vyvolá změnu času, potřebného k vyřízení dotazu, která je také předmětem sledovaným v experimentu, jímž se zabývá tato práce. Z informací, získaných o sql serverech, není zcela jasné, do jaké míry je výkon serveru ovlivněn počtem konkurenčních přístupů k databázi. Prodloužení času potřebného k vyřízení dotazu je dále graficky zpracováno.
Teoretická část
10
Má počet spojení, realizovaných v dotazu vliv na rychlost vyhodnocení dotazu? Doba, po kterou bude dotaz zpracováván, by se měla zvyšovat s přibývajícím počtem spojení tabulek v dotazu, a to takových spojení, která jsou uskutečněna za pomoci příkazu INNER JOIN. Jaký trend má však zvyšující se časová náročnost vyřízení dotazu, není dosud známo. Tento trend by se měl projevit na grafu výsledných naměřených hodnot v praktické části této práce.
Záleţí na pořadí tabulek v dotazu? Pro každý dotaz sestaví optimalizátor několik plánů vyřízení dotazu. Když odkazuje příkaz SELECT na data, uložená například ve třech tabulkách, DB server může přistoupit k tabulce T1, použít data k vyhledání shodujících se řádků z tabulky T2 a následně z T3. Při spojování tří tabulek tedy existuje 6 různých variant přístupu při vyřízení dotazu. Optimalizátor pak sestaví takový plán, který bude vyřízen nejrychleji. Z toho vyplývá, že na pořadí tabulek, které je v dotazu zadaném uživatelem by nemělo záležet, protože optimalizátor stejně vybere to pořadí, které bude nejvhodnější pro vyřízení.
Teoretická část
11
2.2 MySQL Sever 5.1 V listopadu roku 2008 byla firmou Sun Microsystems, dceřinnou společností Oracle Corporation, vydána verze 5.1 relačního databázového serveru MySQL. Předchozí verze 5.0 přinesla vylepšení v podobě uložených procedur, spouští a pohledů. Umožňuje práci s metadaty a distribuovanými XA transakcemi (v tabulkách typu InnoDB). Server s označením 5.1 nově podporuje partitioning (rozdělování rozsáhlých tabulek na více oddílů), časování událostí (Event Scheduler) a objevuje se tu nový úložný modul IBMDB2I
(tabulky typu IBM DB2, podporující transakce).
2.2.1 Organizace a struktura entit Fyzická struktura indexů Všechny indexy v úložném modulu InnoDB jsou reprezentovány Bstromovou strukturou a jsou uloženy ve stránkách o standardní velikosti 16KB. Záznamy o jednotlivých indexech jsou na stránkách na úrovni listů B-stromu. Pokud jsou záznamy indexů vkládány vzestupně nebo sestupně, zaplní se výsledná stránka indexu 15KB. Vkládají-li se záznamy v náhodném pořadí, zaplnění stránky se pohybuje v rozmezí 8 - 15KB.
Fyzická struktura řádků Struktura řádků je definována pro celou tabulku řádkovým formátem. Toto nastavení probíhá při vytvoření tabulky. Pro server MySQL 5.1 je výchozím formátem řádek formát COMPACT. Jestliže však vyžadujeme kompatibilitu s předchozími verzemi MySQL, musíme použít formát REDUNDANT. Použitím kompaktního formátu se sníží prostor, potřebný pro uložení řádku přibližně o 20%, ale zároveň se při některých operacích zvýší množství výpočetních prostředků (zejména zatížení procesoru).
Teoretická část
12
FORMÁT REDUNDANT
Každý záznam indexu obsahuje 6 bytové záhlaví. Toto záhlaví je použito při propojování navazujících záznamů a také při uzamykání na úrovni řádků (rowlevel locking). Záznamy v klastrovaném indexu obsahují pole pro všechny uživatelsky definované sloupce. Dále také 6 bytové pole ID transakce a 7 bytové pole roll pointeru. Pokud není v tabulce definován primární klíč, bude každý záznam klastrovaného indexu také obsahovat pole 6 bytů pro ID řádků. V záznamu existuje ukazatel pro všechna pole. Když celková velikost polí nepřesáhne 128 bytů, představuje ukazatel pouze 1 byte. V opačném případě jsou to 2 byty. Všechny ukazatele společně tvoří adresář záznamu (record directory). Oblast, do které ukazatel směřuje, se pak nazývá datová část záznamu (data part of the record). Sloupce s pevnou délkou znaku jsou uloženy jako CHAR(10). InnoDB nedokáže oříznout koncové mezery sloupců typu VARCHAR. Hodnota SQL NULL si rezervuje 1 - 2 byty v adresáři záznamů. Pokud je uložena ve sloupci s proměnnou délkou znaku, nerezervuje si žádný prostor v datové části záznamu. Je-li však uložena ve sloupci s pevnou délkou, alokuje si hodnota místo, odpovídající právě velikosti sloupce. Rezervace fixního prostoru pro hodnoty NULL umožňují následovnou aktualizaci záznamu z NULL na hodnotu NOT NULL. To může být provedeno, aniž by došlo k rozdělení stránky indexu. FORMÁT COMPACT
Každý záznam indexu obsahuje 5 bytové záhlaví, zahrnující ještě předcházející část s proměnou délkou, která je použita stejně jako u řádkového formátu REDUNDANT.
Teoretická část 13 Část záhlaví záznamu s proměnnou délkou obsahuje bitový vektor pro indikaci NULL sloupců. Velikost prostoru, vyhrazeného pro vektor, je závislá na počtu sloupců s hodnotou NULL. Jestliže počet nulových sloupců označíme jako N, pak velikost vektoru bude N/8 bytů. Tyto sloupce pak nezabírají další prostor pro aktualizování obsahu a jsou reprezentovány pouze bitovým vektorem. V případě, že všechny sloupce indexu jsou NOT NULL a mají pevnou délku, neobsahují záznamy žádnou část s proměnnou délkou. Všechna NOT NULL pole s proměnnou délkou jsou uložena v záhlaví záznamu v podobě 1 - 2 bytů. Dva byty jsou zapotřebí, pouze pokud je sloupec uložen v externích stránkách, v overflow stránkách nebo pokud maximální dálka překračuje 255 bytů a aktuální délka překračuje 127 bytů. Za záhlavím záznamu následuje datový obsah NOT NULL sloupce. Záznamy v klastrovaném indexu obsahují pole pro všechny uživatelsky definované sloupce. Dále jsou zde také pole identifikátorů transakcí a roll pointerů. Když v tabulce není definován primární klíč, každý záznam klastrovaného indexu obsahuje 6 bytové pole identifikátoru řádku. InnoDB se pokouší uložit sloupce CHAR(N) v kódování UTF-8 do N bytů za pomoci ořezávání koncových mezer. Při použití redundantního formátu řádků zabírají sloupce 3 × N bytů. V mnoha případech umožní alokování minimálního prostoru aktualizovat sloupec, aniž by došlo k rozdělení stránky indexu.
2.2.2 Oddíly Tato funkce umožňuje distribuovat části jednotlivých tabulek do více oddílů, a to přes souborový systém podle pravidel, která lze nastavit při vytváření tabulky. Rozsáhlé tabulky jsou pak fyzicky rozděleny do několika souborů na různých oddílech, ale na uživatelské úrovni jsou prezentovány stále
Teoretická část 14 jako jeden celek. V některých případech může rozdělení tabulky do více oddílů vést k urychlení dotazů oproti tabulce na jednom oddílu.
2.2.3 Optimalizace a vykonávání dotazů Optimalizace dotazů Po odeslání dotazu provede MySQL jeho analýzu a zjišťuje, zda může použít některé optimalizační metody k urychlení vyřízení tohoto dotazu. MySQL provádí rozbor dotazů z toho důvodu, aby vytvořil interní stromovou strukturu (parse tree). Pak teprve aplikuje optimalizace. Může dotaz přepsat, určit pořadí, v němž bude číst tabulky, zvolit, které indexy použije atd. MySQL server podporuje ovlivňování rozhodovacího procesu optimalizátoru za pomoci speciálních klíčových slov, tzv. pokynů (hints). Optimalizátor se nestará o to, ve kterém úložném enginu je konkrétní tabulka uložena. Úložný engine naopak ovlivňuje, jak server optimalizuje dotaz. Optimalizátor od úložného enginu zjišťuje, zda má potřebnou výbavu. Dále se dotazuje na náklady jistých operací a na statistiky o datech tabulky.
Teoretická část
15
Obrázek 1: Průběh optimalizace MySQL1
JAK OPTIMALIZÁTOR PRACUJE
Optimalizátor má několik úkolů a při jejich realizaci postupuje za pomoci indexů, kdykoliv je to možné. Optimalizátor se také snaží minimalizovat porovnávanou množinu, což může vést k rychlejšímu nalezení řádků, které odpovídají vstupní podmínce. Dotazy budou vyřízeny dříve, pokud se nejprve provede test, který určí postup při vyřizování dotazu. Příkladně, odešleme-li na server dotaz, který porovnává dva indexované sloupce se vstupní podmínkou, optimalizátor vyhledá nejrychlejší variantu vyřízení. Podmínce pro první sloupec odpovídá 900 řádků a podmínce pro druhý sloupec jen 300 řádků. Oběma podmínkám dohromady pak vyhovuje
1
Zdroj: http://www.fanaticalsolutions.com/2009/09/20/mysql-query-execution-basics/
Teoretická část 16 pouze 30 záznamů. Pokud budeme nejdříve testovat výslednou množinu prvního sloupce, musíme najít shodu třiceti řádků v devítistech záznamech. To představuje 870 testů, které selhaly. Obrátíme-li postup a testujeme jako první sloupec číslo dva, provede se pouze 270 chybných testů. Optimalizátor pak vybere variantu, která testuje nejmenší počet řádků. Menší počet provedených testů znamená i méně výpočtů a výpočetních prostředků. Optimalizátor také provádí odhady efektivnosti použití indexů. Jestliže se provádí porovnávání hodnoty v indexovaném sloupci s konstantou, OP předpokládá, že klíčové hodnoty jsou rovnoměrně rozloženy v rámci indexu. Provádí se také rychlá kontrola indexu. Ta pomůže odhadnout počet položek, které jsou použity při porovnávání. Na základě této kontroly se optimalizační mechanismus rozhodne, jestli index použije nebo ne. Pro tabulky uložené v modulech MyISAM, InnoDB a BDB existuje funkce ANALYZE TABLE, sloužící k analýze klíčových hodnot. Zjištěné informace jsou pak zprostředkovány OP, který má již lepší přehled o tabulce.
Vykonávání dotazů Po zadání sql příkazu je prvním krokem analýza, provedená syntaktickým analyzátorem (query parser). Analyzátor vytvoří stromovou strukturu, založenou na zadaném dotazu. Stromovou strukturu snáze zpracují následující komponenty, kterými musí dotaz projít, než se k uživateli dostanou požadovaná data. Cesta dotazu je realizována technologií pipelining. Analyzovaný dotaz pak obdrží procesor dotazů (query processor). Ten zkontroluje správnost syntaxe a sémantiku MySQL dotazu, aby určil, zda je dotaz validní. Pokud je vyhodnocen jako validní, pokračuje ke zpracování do další části. Není-li dotaz validní, neproběhne a uživatel je informován o chybě ve zpracování.
Teoretická část 17 Další komponenta se nazývá bezpečnostně integrační manager (security integration manager). Do něho se dotaz dostane, pouze pokud jej procesor označí jako validní. Poté se v manageru kontroluje seznam řízení přístupu uživatelů. Tato kontrola zahrnuje ověření přístupu uživatele ke konkrétní databázi a ověření práv pro přístup k tabulkám a k záznamům. Tímto lze z části zabránit uživatelům, kteří chtějí napadnout databázi ve zpřístupnění tabulek a záznamů a také znemožnit jim negativní ovlivňování procesů. Po zjištění, zda má uživatel platné oprávnění k přístupu ke specifickým tabulkám v databázi, může být dotaz optimalizován. Primárním cílem optimalizátoru platformy MySQL je snaha o vyřízení dotazu v co nejkratším čase. Díky tomu je MySQL rychlejší v porovnání s ostatními platformami. Po optimalizaci může být dotaz proveden. K tomu slouží vykonávací stroj (execution engine), který má přístup do fyzické vrstvy MySQL databáze. Po vykonání dotazu se uživateli vrátí požadovaná data.
Teoretická část
18
2.3 Microsoft SQL Server 2005 Microsoft SQL Server 2005 byl uveden na trh v listopadu 2005. Verze 2005 se vyvinula z předchozích produktů firmy Microsoft tj. SQL Server 7.0 a SQL Server 2000. Tento server se vyznačuje vyšším výkonem, spolehlivějším a bezpečnějším chodem a má mnohá vylepšení oproti svým předchůdcům.
2.3.1 Organizace a struktura entit Tabulky a indexy jsou uloženy jako kolekce 8KB stránek. Tabulka je uložena na jednom nebo více oddílech. Každý oddíl zahrnuje řádky dat buďto v úložišti (Heap) nebo v klastrované struktuře indexů. Stránky jsou řízeny jednou nebo několika alokačními jednotkami, v závislosti na typu sloupce a na řádcích dat.
Obrázek 2:Organizace tabulek MSSQL2
2
Zdroj:http://msdn.microsoft.com/en-us/library/ms189051.aspx
Teoretická část Klastrované tabulky, úloţiště a indexy
19
SQL Server používá v rámci oddílu jednu ze dvou metod k organizaci datových stránek tabulky: Klastrované tabulky jsou takové tabulky, které mají klastrovaný index. Řádky tabulek jsou uloženy na základě klíče klastrovaného indexu. Takovýto index je implementovaný ve struktuře B-stromu, což zajišťuje rychlé vyhledání řádků na základě hodnot jejich klastrovaného indexu. Stránky v každé úrovni indexu, včetně stránek v úrovni listů, jsou spojeny v doubly-linked seznamu. Navigace mezi jednotlivými úrovněmi se provádí pomocí klíčových hodnot. Tabulky, které nemají klastrovaný index si lze přestavit jako úložiště. Datové řádky nejsou uloženy v libovolném pořadí a není zde žádný zvláštní řád posloupností datových stránek. Stránky nejsou spojeny do linkovaného seznamu. Indexované pohledy (views) mají stejnou strukturu uložení jako klastrovaná tabulka. Pokud jsou úložiště nebo klastrované tabulky uloženy na více oddílech, každý oddíl má strukturu úložiště nebo B-stromu, která obsahuje skupinu řádků pro daný specifický oddíl. Např. když je klastrovaná tabulka rozdělena na čtyři oddíly, vytvoří se pro ni čtyři B-stromy, každý v jednom oddílu.
Neklastrované indexy Neklastrované indexy mají B-stromovou strukturu podobně jako indexy klastrované. Rozdíl je v tom, že neklastrovaný index nemá vliv na pořadí řádků dat. Úroveň listů obsahuje řádky indexu. Každý řádek indexu obsahuje neklastrovanou klíčovou hodnotu, lokátor řádku a všechny zahrnuté nebo nonkey sloupce. Lokátor odkazuje na řádek, který má klíčovou hodnotu.
Teoretická část Alokační jednotky
20
Alokační jednotka je kolekce stránek uvnitř úložiště nebo B-stromové struktury, použitá pro správu dat na základě typu stránek. V následujícím odstavci jsou popsány jednotlivé typy alokačních jednotek, použitých pro správu dat v tabulkách a indexech. IN_ROW_DATA - tato alokační jednotka slouží pro správu všech dat v indexovaných i datových řádcích, kromě dat velkých objektů (LOB - Large OBject); stránky jsou typu data nebo index LOB_DATA - v této jednotce se spravují velké objekty, uložené v jednom nebo více následujících datových typech: TEXT, NTEXT, IMAGE, XML, VARCHAR(MAX), NVARCHAR(MAX), VARBINARY(MAX) nebo CLR typy definované uživatelem (CLR UDT); stránky jsou typu Text nebo Image ROW_OVERFLOW_DATA - data s proměnou délkou, která přesahují limit velikosti řádku 8,060 byte, řídí tato jednotka; data jsou uložena v typech: VARCHAR, NVARCHAR, VARBINARY nebo SQL_VARIANT; stránky jsou taktéž typu Text nebo Image
2.3.2 Oddíly Stránky tabulek a indexů jsou uloženy v rámci jednoho nebo více oddílů. Oddíl je jednotka organizace dat, definovaná uživatelem. Implicitně má tabulka nebo index jenom jeden oddíl, který obsahuje všechny stránky tabulek a indexů. Oddíl existuje v rámci jedné souborové skupiny. Organizační struktura, ve které jsou tabulky a indexy na jednom oddílu, odpovídá struktuře dřívějších verzí SQL Serveru. V aktuálních verzích jsou rozděleny na více oddílů. Jestliže je organizační struktura rozdělena do více oddílů, data jsou rozdělena horizontálně a skupiny řádků jsou mapovány do individuálních oddílů, založených na specifickém sloupci. Oddíly mohou být umístěny v jedné
Teoretická část 21 souborové skupině nebo je lze rozdělit do více skupin v databázi. Tabulky a indexy jsou považovány za jednoduché logické entity.
2.3.3 Optimalizace a vyřizování dotazů Pro nalezení nejefektivnějšího způsobu získání požadovaných dat se musí dotaz nejdříve analyzovat. Analýzu zajišťuje jedna z nejdůležitějších součástí DB serveru, která se nazývá optimalizátor dotazů (query optimalizer). Vstup optimalizátoru se skládá z dotazu, schématu databáze (definice tabulek a indexů) a z databázových statistik. Výstupem je plán provedení dotazu (query execution plan), někdy označovaný jako plán dotazu nebo jen plán. Vstupy a výstupy optimalizátoru při zpracovávání jednoduchého dotazu SELECT jsou znázorněny v následujícím diagramu:
Obrázek 3: Průběh optimalizace MSSQL3
3
Zdroj: http://msdn.microsoft.com/en-us/library/ms190623.aspx
Teoretická část
22
Plán provedení dotazu Plán provedení definuje pořadí, ve kterém server přistupuje k tabulkám. Většinou existuje více možných pořadí, ve kterých může server přistupovat k tabulkám pro vytvoření výsledné množiny dat. Např. v případě, že dotaz SELECT odkazuje na data, uložená ve třech tabulkách, DB server může přistoupit k tabulce T1, použít data k vyhledání shodujících se řádků z tabulky T2 a následně z T3. Při spojování tří tabulek existuje 6 různých plánů vyřízení dotazu. Další součástí plánu jsou metody, použité pro získání dat z jednotlivých tabulek. Server používá několik odlišných metod přístupu k datům v jednotlivých tabulkách. Pokud je vyžadováno jen několik řádků s hodnotou specifického klíče, DB server může použít vyhledávání v indexech. Jakmile jsou však požadovány všechny řádky tabulky nebo jejich většina, může server ignorovat indexy a provést skenování celé tabulky. Existuje-li index, jehož klíčový sloupec je seřazen pomocí ORDER BY, a jsou-li vyžadovány všechny řádky tabulky, server provede skenování indexů, nikoli tabulky.
Optimalizace Proces, při kterém je zvolen jeden z možných plánů zpracování, se nazývá optimalizace. Optimalizátor dotazů je jednou z nejdůležitějších součástí SQL databázového systému. Při použití optimalizátoru dotazů k analýze dotazu a výběru plánu vzniká určitá režie. Než optimalizátor vybere nejefektivnější plán, vznikne tato režie většinou vícekrát. Optimalizátor dotazů SQL Serveru (dále OP) je nákladově založený optimalizátor. Výraz „nákladově založený“ znamená, že každému možnému plánu se přiřadí odpovídající náklady na použité výpočetní zdroje. OP musí analyzovat všechny plány, odhadnout jejich nároky na výpočetní zdroje a vybrat jeden s nejnižším odhadem nákladů. Některé komplexní příkazy
Teoretická část 23 SELECT mají až stovky možných plánů, jak postupovat při vyřizování dotazu. V těchto případech optimalizátor neanalyzuje všechny kombinace, místo toho použije algoritmus pro nalezení plánu, jehož náklady se liší od minimálního možného množství nákladů jen o předem stanovenou hodnotu. OP nemusí nutně vybírat pouze plán s nejnižšími výpočetními náklady. Vyhledává i takový plán, který sice vrací uživateli výsledky s nějakými přijatelnými výpočetními náklady, ale vrací je nejrychleji. Například paralelní vyřizování dotazu je sice náročnější na výpočetní zdroje, ale k dokončení vyřizování dotazu dojde v mnohem kratším čase, než při sériovém přístupu. OP použije paralelní zpracování dotazu jen v případě, že tím nedojde k nadměrnému zatížení serveru. Optimalizační nástroj se opírá o distribuci statistik. Distribuované statistiky obsahují odhady výpočetních nákladů rozdílných metod (plánů) pro získání informací z tabulek nebo indexů. Odkazují na selektivitu hodnot specifického indexu nebo sloupce. Jakmile statistiky přestanou být aktuální, pracuje se s aktuálním stavem tabulky. PROČ JE OP JEDNOU Z NEJDŮLEŢITĚJŠÍCH SOUČÁSTÍ DB SERVERU?
Zajišťuje dynamické přizpůsobování podmínkám v databázi bez nutnosti zásahů programátora nebo administrátora. OP sestavuje nejefektivnější plán pro aktuální stav databáze pokaždé, když se spustí daný příkaz.
Teoretická část
24
Kroky, pouţité při vyřizování dotazu Základní kroky, které SQL Server použije pro vyřízení dotazu: Syntaktický analyzátor (parser) zpracuje dotaz a rozdělí ho na logické jednotky, jako jsou klíčová slova (keywords), výrazy (expressions), operátory (operators) a identifikátory (identifiers). Strom dotazu, někdy nazývaný sekvenčním stromem, je sestaven z logických kroků, potřebných k transformaci zdrojových dat do formátu požadovaného pro výslednou množinu. OP analyzuje odlišné cesty přístupu ke zdrojové tabulce, a pak vybere sérii kroků, která vrátí výsledek nejrychleji při použití minimálních výpočetních zdrojů. Strom dotazu je aktualizován právě na tuto sérii kroků. Finální, optimalizovaná verze stromu dotazu je plán vyřizování dotazu. Relační stroj (Relational engine) začne zpracovávat plán. Požadovaná data z databáze jsou uvolněna úložným strojem (Storage engine). Relační stroj pak zpracovaná data vrátí klientovi ve formátu, definovaném pro výstupní množinu.
Teoretická část 2.4
25
Oracle Database 10g
Databázová platforma Oracle je jednou z nejznámějších platforem na celém světě. Disponuje vysokým výkonem a podporou partitioningu a XML databází. Databázový server Oracle Database je jedním z mnoha produktů společnosti Oracle Corporation, která byla založena roku 1977. Pro účely této práce byla vybrána verze 10g. Aktuální verzí je 11g, která vyšla v roce 2007. Oracle Database 10g je však v současnosti stále více používaná než její následovník. Platforma Oracle podporuje nejen standardní relační dotazovací jazyk SQL podle normy SQL92, ale také proprietární firemní rozšíření, imperativní programovací jazyk PL/SQL, umožňující použití uložených procedur, uživatelských funkcí a spouští.
2.4.1 Organizace a struktura entit Fyzická struktura tabulek Tabulka je nejzákladnější datovou strukturou relačních databází a představuje kolekci řádků. Každý řádek tabulky obsahuje jeden nebo více sloupců. Platforma Oracle má dva základní druhy organizační struktury tabulek. Defaultní organizací nově vytvářených tabulek je tzv. úložiště (HeapOrganized) a druhou variantou je indexová organizace (Index-Organized).
ÚLOŢIŠTĚ (HEAP-ORGANIZED)
Tato organizace je základním typem a označuje se též jako Regular. Tyto tabulky obvykle neobsahují klastrovaný index a nejsou uloženy v B-stromu. Pokud je potřeba definovat nad tabulkou index, alokuje se prostor v paměti zvlášť pro samotnou tabulku a zvlášť pro index.
Teoretická část
26
INDEXOVĚ ORGANIZOVANÁ TABULKA (INDEX-ORGANIZED TABLE)
Oracle poskytuje unikátní druh struktury tabulek zvaný Index-organized table (IOT). Tabulky s organizační strukturou IOT jsou uloženy v podobě Bstromového indexu. Kromě udržování hodnot primárního klíče každého řádku ukládají tyto tabulky také hodnoty neklíčových sloupců. IOT se vyznačují rychlejším přístupem k řádkům tabulky přes primární klíč nebo jakýkoliv jiný klíč, který je platným prefixem klíče primárního. Vzhledem k tomu, že neklíčové atributy řádků jsou umístěny v listech B-stromu, neovlivňují přístup k blokům indexu. Alokace paměti je omezena jen na IOT.
Obrázek 4: Organizace tabulek Oracle 4
U verze 9i a vyšší je možné definovat také externí tabulky. Jak již název napovídá, jsou data externích tabulek uložena mimo databázi. Data jsou pouze pro čtení. Není možné je tedy dále upravovat. Verze 10g přináší možnost vytvářet virtuální sloupce nebo celé tabulky. Takovéto sloupce jsou definovány dotazem a jeho výsledky nejsou fyzicky
4
Zdroj:
http://download.oracle.com/docs/cd/B10500_01/server.920/a96521/tables.htm#8192
Teoretická část 27 uloženy. Data pro aplikaci jsou tedy přístupná pouze do té doby, dokud jsou výsledky v paměti.
2.4.2 Oddíly Možnost rozdělit rozsáhlé tabulky a indexy do několika částí je jedním z hlavních aspektů zvýšení výkonu a zjednodušení zpracování těchto entit pro databázové servery. Někdy se též tato technika nazývá segmentace. Oracle Database umožňuje použití široké škály metod pro segmentaci, jako jsou například intervaly, reference, seznamy a rozsahy. Na platformě Oracle je možné použít několik metod pro práci s jednou tabulkou. Na jeden atribut se využije např. metoda seznamu a na ostatní metoda rozsahu. Oracle Partitioning je volitelný doplněk k databázi Oracle Database a je také základem Oracle Information Lifecycle Management.
2.4.3 Optimalizace a vyřizování dotazů Optimalizátor určuje nejvýhodnější způsob vyřízení SQL dotazu, zvažuje mnoho faktorů, souvisejících s odkazy na objekty a s uvedenými podmínkami. Toto rozhodnutí je důležitým krokem při zpracování každého SQL příkazu a může výrazně ovlivnit dobu provedení. Výstupem optimalizátoru je plán, který popisuje optimální metodu vyřízení dotazu. Databázový server Oracle využívá dva druhy optimalizace. První je nákladově založená optimalizace neboli costbased (CBO), druhá je založená na pravidlech tzv. rule-based (RBO). Implicitně se používá metoda CBO. Oracle Corporation neustále vyvíjí a vylepšuje nákladově založený optimalizátor a také nové funkce, které ho vyžadují.
Teoretická část Funkce, vyžadující CBO:
segmentace tabulek a indexů
tabulky s organizační strukturou Index-organized
reverse key indexy
function-based indexy
paralelní SQL dotazy a příkazy DML
rozšiřitelný optimalizátor
enterprise Manager progress meter
bimapové indexy
28
Postup při optimalizaci VYHODNOCENÍ VÝRAZŮ A PODMÍNEK
Optimalizátor nejprve vyhodnotí výrazy a podmínky, obsahující konstanty. TRANSFORMACE PŘÍKAZŮ
Komplexní příkazy, obsahující například pohledy nebo souvztažné poddotazy, může optimalizátor transformovat do několika spojených příkazů, které odpovídají původnímu dotazu. VOLBA OPTIMALIZAČNÍ METODY
Server vybere CBO nebo RBO přístup a následně určí cíl optimalizace. VÝBĚR PŘÍSTUPOVÉ CESTY
Ke každé tabulce, k jejímž datům potřebuje dotaz získat přístup, vybere optimalizátor jednu nebo více přístupových cest. VÝBĚR POŘADÍ PŘI SPOJOVÁNÍ TABULEK
Pro dotazy, obsahující klauzuli JOIN a spojující více než dvě tabulky, vybírá optimalizátor, který z párů tabulek bude spojen první, a pak, která tabulka bude připojena k výsledku a tak dále.
Teoretická část
29
Obrázek 5: Průběh optimalizace Oracle5
Prohledávání tabulek Optimalizátor serveru Oracle se snaží při optimalizaci získat co nejefektivnější plán vyřízení dotazu. Na efektivnosti plánu se značnou měrou podílí způsob, jakým jsou vyhledávána data v tabulce, popřípadě v tabulkách či v indexech. Oracle nabízí optimalizátoru několik velmi odlišných cest k získání požadovaných dat.
5
Zdroj: http://download.oracle.com/docs/cd/B10501_01/server.920/a96533/optimops.htm
Teoretická část
30
FULL TABLE SCAN
Tento typ skenování čte všechny řádky z tabulky a filtruje ty, které odpovídají kritériím výběru. Každý řádek tabulky je zkoumán a určuje se, zda splňuje podmínky klauzule WHERE. Když Oracle prování skenování celé tabulky, jsou všechny bloky načítány sekvenčně. Protože na sebe bloky navazují, může I/O volat rozsáhlejší části, přesahující hranice jednotlivých bloků, což vede k urychlení procesu. Toto urychlení způsobí, že skenování celé tabulky je pak provedeno s velkou účinností. Proč je plný průchod tabulkou rychlejší při přistupování k velkým objemům dat?
Při velkém objemu bloků tabulky je úplné prohledávání tabulky výhodnější, než vyhledávání v rozsahu indexů. To je způsobeno tím, že plný tabulkový sken může používat I/O volání rozsáhlých částí. Menší množství volání větších částí je výhodnější, než provádění mnoha volání malých částí.
Skenování celé tabulky se provádí v těchto případech:
malá tabulka – pokud I/O volání obsáhne všechny bloky tabulky
velký objem dat – v případě, že optimalizátor přepokládá, že bude procházena většina záznamů tabulky
chybějící indexy – jestliže dotaz nemůže pro vyhledávání použít žádný z existujících indexů
ROWID SCAN
RowID je identifikátor řádku a jednoznačně specifikuje datový soubor a blok tabulky, ve kterém se daný řádek nachází a také pozici řádku v bloku. Vyhledání řádku podle jeho RowID je nejrychlejším způsobem, jak získat
Teoretická část 31 jeden konkrétní řádek, protože v databázi je uvedeno přesné umístění všech řádků. Pro prohledání tabulky podle RowID jsou nejprve získány identifikátory vybraných řádků, a to buď z klauzule WHERE nebo prostřednictvím skenu indexů jednoho nebo více indexů, definovaných nad tabulkou. Oracle pak vyhledá každý vybraný řádek v tabulce pomocí RowID.
Kdy optimalizátor vyuţije k vyhledávání RowID:
Obecně je to až druhý krok po získání identifikátorů z indexů. Přístup k RowID se nemusí provádět vždy při prohledávání indexů. V případě, že jsou všechny sloupce, potřebné pro dotaz, indexované, nemusí se používat identifikátory řádků. RowID představují umístění řádku, které je interně specifikováno pro Oracle. Navíc se tyto identifikátory mohou měnit s rozdílnou verzí Oracle database. Z těchto důvodů se vyhledávání řádků pouze podle jejich RowID používá velmi zřídka. Hodnota těchto identifikátorů se také mění například v důsledku migrace, řetězení, návaznosti cizího klíče na primární nebo při importu a exportu. INDEX SCAN
V této metodě je hledaný řádek klientovi navrácen po procházení indexu za použití hodnot indexovaného sloupce specifikovaného v dotazu. Prohledávání indexů navrací data z indexu na základě jednoho nebo více indexovaných sloupců. Index neobsahuje pouze indexované hodnoty, ale také identifikátory řádků RowID.
Teoretická část
32
Prohledávání indexů se dělí na několik typů: Skenování unikátních indexů (Index Unique Scans)
Cílem tohoto hledání je pouze jeden řádek. Provádí se pouze tehdy, když primární klíč nebo unikátní index zaručí, že podmínce odpovídá pouze jeden řádek. Skenování indexů s určením rozsahu (Index Range Scans)
Zaměřuje se na selektivní data, která se vrací ve vzestupném pořadí. Provádí se, pokud se podmínka týká indexovaného sloupce a obsahuje například col1 = :b1 nebo col1 < :b1 nebo col1 like '%ASD'. Skenování indexů s určením rozsahu v sestupném pořadí (Index Range Scans Descending)
Je totožný s předchozím, ale vrací data v sestupném pořadí. Používá se pro vyhledání nejnovějších záznamů jako prvních a provádí se pouze, pokud sestupné řazení odpovídá indexu. Skenování indexů s moţností přeskakování (Index Skip Scans)
Urychluje vyhledávání v indexu podle nonprefix sloupců. Skenování bloků indexu je rychlejší než skenování bloků tabulky. Umožňuje kompozitní index rozdělit do několika podindexů a některé pak může přeskočit. Plné skenování (Full Scans)
Prování se v případě, že predikát odkazuje na jeden ze sloupců indexu. Pokud není predikát uveden, musí být pro provedení tohoto skenu všechny sloupce tabulky zahrnuty v indexu a alespoň jeden ze sloupců musí být NOTNULL. Odstraňuje nutnost operace seřazení, protože se data řadí podle klíče indexu. Rychlé plné skenování (Fast Full Index Scans)
Tento sken je alternativou předchozího. Všechny sloupce tabulky musejí být zahrnuty v indexu a alespoň jeden ze sloupců musí být NOTNULL. Pracuje pouze s indexem a k tabulce vůbec nepřistupuje. Nemůže být paralelizován.
Teoretická část
33
CLUSTER SCANS
Tímto skenováním se získávají data z tabulky, uložená v indexovaných clusterech, která mají stejnou hodnotu klíče clusteru. V indexovaných clusterech jsou záznamy se stejnou hodnotou klíče uloženy ve stejném bloku dat. Databázový stroj Oracle nejprve získá RowID jednoho z vybraných řádků prohledáním indexu clusteru a následně ho vyhledá na základě získaného identifikátoru.
Vyřizování SQL dotazů Jedním z nejčastějších úkolů Oracle Call Interface (OCI) je přijímání a vyřizování SQL dotazů. Jakmile jsou otevřená připojení k serveru a jsou přiděleny potřebné handlery, může Oracle provést kroky k vyřízení dotazu.
POSTUP PŘI ZPRACOVÁVÁNÍ DOTAZU Příprava - Prepere
Definuje požadavky aplikace s pomocí OCIStmtPrapare(). Provázání - Bind
Příkazy a dotazy jazyka DML se vstupními proměnnými se provádějí jedním nebo více provázanými voláními, a to za použití OCIBindByPos(), OCIBindByName(), OCIBindObject(), OCIBindDynamic() nebo OCIBindArrayOfStruct() k provázání adresy každé vstupní proměnné (nebo PL/SQL výstupní proměnné) nebo podle všech zástupných symbolů v příkazu. Vykonávání - Execute
Pro vykonání dotazu se volá OCIStmtExecute(). Pro příkazy jazyka DDL nejsou potřebné další kroky.
Teoretická část
34
Popsání - Describe
Zde je podrobně popsán seznam položek, vyhledaných příkazem SELECT, tzv. select-list. Tento krok je volitelný a není bezpodmínečně vyžadován, pokud je v době kompilace znám počet položek select-listu a atributy všech položek, jako je např. délka a datový typ. Pokud se krok provádí, využívá se OCIParamGet() a OCIAttrGet(). Definování - Define
V případě dotazů se provede jedno nebo více definovaných volání OCIDefineByPos(), OCIDefineObject(), OCIDefineDynamic() nebo OCIDefineArrayOfStruct() pro definování výstupních proměnných pro každou položku select-listu v SQL dotazu. Pro definování výstupních proměnných anonymních bloků PL/SQL dotazů se definovaná volání neprovádějí. Definice se již provedla při provázání dat. Dokončení - Fetch
Pro konečné získání výsledků se zavolá OCIStmtFetch().
Teoretická část
35
Obrázek 6: Průběh zpracování dotazů Oracle6
6
Zdroj:
http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/sqlplsql.htm#i1694
Praktická část
36
3 Praktická část 3.1 Metodika K měření výkonu DB platforem slouží vlastní testovací nástroje, které jsou součástí naprogramované aplikace. Tato aplikace je napsána v jazyce C# ve vývojovém prostředí Microsoft Visual Studio 2008. Komparační aplikace by se dala rozdělit na několik hlavních částí, které jsou znázorněny v následujícím blokovém schématu. Jednotlivé bloky jsou tvořeny jednou nebo více třídami, podle toho, jakou mají v aplikaci funkci. Z tohoto pohledu je nejrozsáhlejším blokem MASTER, který obsahuje většinu komparačních částí. Ostatní bloky jsou více či méně pomocné a zajišťují pouze vedlejší činnosti.
Obrázek 7: Blokové schéma aplikace
Blok GENERATOR představuje třídu v aplikaci, která slouží v plnění databáze, respektive tabulek v měřených databázích datovými záznamy. Generátor vytváří seznamy o určeném počtu prvků a o specifickém datovém typu, který musí samozřejmě odpovídat datovému typu určeného atributu v cílové tabulce. GUI je grafické uživatelské rozhraní. Toto rozhraní je reprezentováno formulářem s prvky pro výběr dané platformy a zvolení požadovaného testu. Obsahuje také jednoduchý výpis naměřených hodnot.
Praktická část 37 MASTER je hlavní blok, ve kterém jsou implementovány všechny měřící metody a veškerá měření se provádí právě zde. Blok, sloužící pro připojení, je nazván CONNECTOR. Ten spojuje aplikaci s jednotlivými servery pomocí rozhraní ODBC. Podrobnější popis a funkcionalita jednotlivých bloků je vysvětlená dále.
3.1.1 Generator Jelikož je experiment, provedený v této práci, založen na relačních databázích, je zapotřebí tyto databáze naplnit daty pro potřeby měření. Protože jsou v současnosti kladeny na databázové servery velké nároky a objem dat se neustále zvyšuje, je třeba pro přiblížení k realitě naplnit tabulky v databázi velkým množstvím záznamů. Ručně zadávat stovky tisíc záznamů by nebylo efektivní a velmi by to prodloužilo práci. Z tohoto důvodu je součástí měřící aplikace i generátor dat. Generátor je nástroj, vytvářející záznamy různých datových typů, které jsou blíže popsány níže. Textové řetězce Řetězce znaků jsou na databázových platformách reprezentovány typem VARCHAR popřípadě NVARCHAR, ale v měřící aplikaci zastupuje tuto skupinu datový typ STRING. Textové řetězce, které jsou v generátoru vytvářeny, se dají rozdělit do dvou skupin, přičemž každé skupině náleží vlastní metoda generování. První skupinou jsou náhodně generované řetězce o stejné délce, složené z čísel 0 - 9 a z malé a velké abecedy, samozřejmě bez diakritiky (i když české verze testovaných databázových platforem háčky a čárky plně podporují). Druhá skupina je tvořena řetězci s možností alfabetického seřazení. Jsou to například jména a příjmení. Vytvoření zcela náhodně vygenerovaného jména či příjmení nelze realizovat žádnou jednoduše implementovatelnou metodu.
Praktická část 38 Z tohoto důvodu jsou záznamy z této skupiny náhodně vybírány ze seznamu s již existujícími jmény a příjmeními. Důvodem pro rozdělení textových řetězců na dvě skupiny je snaha o zjištění, zda ovlivňuje obsah buněk tabulky rychlost vyhledávání v rámci stejného datového typu. Časové záznamy Časové záznamy jsou v drtivé většině případů zastoupeny pouze datem složeným z roku, měsíce a dne. Každý záznam obsahuje ještě složku časovou, která se skládá z hodiny, minuty a sekundy, ale tato složka záznamu bývá většinou zanedbána. Tato část generátoru vytváří záznamy, které nabývají hodnot v rozmezí dvou specifických dní. První z těchto dnů zadává uživatel. Jedná se o jakýkoliv den z minulosti, tím se rozumí nějaký den pře aktuálním datem. Druhý den tvoří právě aktuální datum. Generování dat je založeno na vytváření náhodných čísel typu DOUBLE, která se následně převedou do typu DATETIME pomocí technologie OLE Automation date, zkráceně OA date. OA date je implementován jako číslo s plovoucí desetinou čárkou, jehož hodnota představuje počet dní od 30. prosince 1899. Přesněji představuje půlnoc 30. prosince, hodiny jsou totiž reprezentovány právě desetinami tohoto čísla. Pro příklad 31. prosinec 1899 je reprezentován číslem 1.0, číslo 2.25 představuje 6 hodin 1. ledna 1900. Toto číslo může být i záporné například -1.0 je 29. prosince 1899. Maximální hodnota, kterou může OA date nabývat je reprezentována datem 31. prosince 9999.
Praktická část
39
Číselné záznamy V reálném prostředí DB systémů se prakticky nenajde žádná databáze, ve které by nebyla alespoň jedna tabulka se sloupcem nějakého číselného datového typu. Proto generátor také obsahuje sadu metod pro vytváření číselných záznamů. Tyto metody jsou velmi jednoduše implementovatelné za pomoci třídy RANDOM, která vrací náhodné hodnoty z určeného intervalu. Tento interval se nastavuje podle potřeby. Pokud je např. třeba vygenerovat smyšlená poštovní směrovací čísla, interval se nastaví na čísla pětimístná. Zdánlivě jsou tyto drobné nuance zanedbatelné, ale dodrží-li se předpokládaný rozsah číselných hodnot, pak se experiment dopouští menších chyb a výsledky měření jsou pak bližší skutečnosti.
3.1.2 Connector Aby byla zachována univerzálnost připojování k databázím a zároveň stejné podmínky pro porovnávání serverů, je připojení realizováno pomocí rozhraní Open Database Connectivity zkráceně ODBC. ODBC je API rozhraní, sloužící pro přístup k datům, uloženým v prostředí relačních i nerelačních databázových systémů. Poskytuje otevřený, na platformě nezávislý a univerzální způsob připojení. S ODBC mohou vývojoví experti vytvářet aplikace, umožňující konkurenční přístup, používání pohledů a úpravu dat na různých databázových platformách bez nutnosti vytvářet individuální připojení pro každou konkrétní platformu zvlášť. Vytvořením ODBC připojení je definováno spojení mezi aplikací a databází a obsahuje informace, potřebné pro přístup k datům. Pro připojení k různým databázovým serverům, jako jsou např. Microsoft SQL, Oracle nebo MySQL, slouží konektor, který je pro každý server odlišný. Po zvolení správného konektoru je nutné zavést ovladač, který je součástí konektoru, pro realizaci
Praktická část 40 přístupu do databáze. Jakmile je ODBC spojení vytvořeno, aplikace ho může využít pro přístup k datům v databázi.
MSSQL ODBC konektor Konektor pro Microsoft SQL Server pro komunikaci mezi klientskou aplikací a databázovým serverem využívá standardní komponenty SQL Serveru. Namísto toho, aby byl ovladač implementován jako nová vrstva nad nativním rozhraním serveru a DB-Library, zapíše se ovladač ODBC přímo do stejné vrstvy Network-Library (Net-Library) použitím právě DB-Library. Komunikace v rámci ODBC rozhraní probíhá v syntaxi ODBC SQL nebo SQL Server Transact-SQL, z čehož vyplývá, že je zde také podporován jazyk Transact-SQL. Pro MSSQL server existuje i manager ovladačů. Představuje jej vlastní vrstva, sloužící ke správě komunikace mezi aplikací a konkrétním ovladačem ODBC, se kterým aplikace pracuje. Manager nejdříve načte moduly, obsahující ovladače, a pak předá všechny ODBC požadavky načtenému ovladači. Ovladač MSSQL Serveru pro ODBC tvoří jedna DLL knihovna, která reaguje na všechna volání aplikace, směřující do ODBC rozhraní. Pokud aplikace využívá příkazy ANSI SQL nebo ODBC syntaxe, které nejsou podporovány SQL Serverem, ovladač je přeloží do jazyka Transact-SQL a teprve potom předá příkaz serveru.
MySQL ODBC konektor ODBC konektor pro platformu MySQL obsahuje ovladače ze skupiny MySQL ODBC, dříve zvané MyODBC. Poskytuje přístup do databází MySQL, k čemuž používá, jak již je zřejmé, standardizované API rozhraní ODBC. Pro verze MySQL 3.51 a MySQL 5.1 existují kompatibilní ODBC konektory. MySQL Connector/ODBC, jak je na oficiálním webu nazýván, obsahuje manager ovladačů a nativní rozhraní k databázi MySQL s plnou
Praktická část 41 podporou funkcí, které tato platforma poskytuje včetně uložených procedur a transakcí. Od verze 5.1 dokonce plně v souladu se standardem Unicode.
Oracle ODBC konektor Oracle ODBC konektor aktuálně využívá ovladač, odpovídající specifikaci ODBC verze 3.52. Ovladač je také certifikován pro MDAC 2.8 (Microsoft Data Access Components) na platformách Windows 32bit a 64bit. Podporuje všechna jádra API rozhraní a podmnožinu funkcí první a druhé úrovně. Microsoft také poskytuje komponenty manageru ovladačů pro platformu Windows. Na platformě UNIX je ovladač Oracle ODBC certifikovaný pro managera ovladačů (verze 2.2.12 nebo vyšší). ODBC ovladač je také dostupný jako součást instalace Oracle Instant Client. ODBC konektor obsahuje:
ODBC Manager ovladačů ODBC ovladač ODBC knihovny
3.1.3 Master Blok MASTER je hlavní součástí celé měřící aplikace. Zde se provádí vlastní testování výkonnosti databázových platforem, což je jak názvem, tak i hlavním cílem celé práce. Toto testování je rozděleno do několika dílčích měření. Ta jsou implementována tak, aby podrobila databázové servery zatížení a prověřila některé funkce a možnosti vybraných DB platforem.
Praktická část
42
Měření zatíţení serveru při konkurenčním přístupu Za pomoci technologie vláken je realizován test, založený na současném odesílání většího množství dotazů na server. Nejprve se vytvoří určitý počet vláken, která jsou spuštěna a dotazují se nezávisle na sobě. Každé ze spuštěných vláken odešle na server dotaz s proměnnými atributy. Toto simuluje konkurenční přístup uživatelů, připojených najednou k serveru, kteří by se ve stejný okamžik dotazovali do té samé databáze. Při tomto měření bylo použito až 100 vláken.
Měření vlivu indexů na rychlost vyřízení dotazu Aby mohla být popsána metoda, při níž se používá indexace, bude nejprve následovat stručný teoretický úvod, týkající se právě indexů. Index se vytváří většinou nad určitým sloupcem, popřípadě i nad více sloupci v rámci jedné tabulky. Indexy se definují nad sloupci, u kterých je potřeba rychlejší vyhledávání a udržují se ve struktuře B-stromu, přičemž každý index představuje určité zvýšení nároků na paměť. Jakmile se index jednou vytvoří, server obnovuje jeho obsah implicitně při každé změně v tabulce. Server se také samostatně rozhoduje o tom, zda a jaké indexy při vyhledávání použije. Sloupce, nad kterými je definován index, mají navíc prvky provázané v určitém pořadí, ať už se jedná o atributy s číselným nebo řetězcovým datovým typem. To usnadňuje serveru provedení seřazení podle sloupce s indexem. Význam indexace velmi závisí na počtu záznamů v tabulce. Při malém počtu záznamů (řádově desítky řádků) nedojde prakticky k žádnému urychlení dotazů. Oproti tomu, jedná-li se o rozsáhlé tabulky, mají indexy velký vliv na celkový čas zpracovávání dotazu. Mohlo by se zdát, že je nejlepší definovat
Praktická část 43 indexy nad všemi sloupci v tabulce, čímž se dosáhne maximalizace výkonu serveru při vyřizování dotazů. Pro vyhledávání by tomu možná tak skutečně bylo, ale pro vkládání a mazání záznamů představuje každý index určitou prodlevu při vyřizování a tím server naopak zatěžuje. Důvodem tohoto jevu je zvýšení nároků na paměť, ve které se udržují data indexu. Optimální a v praxi nejvíce používanou variantou je zřízení indexů nad klíčovými sloupci a sloupci, využívanými pro vyhledávání a řazení. Dotazy typu SELECT, kladené na sloupce s řetězcovým datovým typem, které obsahují operátor LIKE s použitím tzv. „divoké karty“ (wild card), mohou být pomocí indexace také urychleny. Aby však byl index při vyhledávání použit, musí být výše zmíněný operátor omezen jen na jeden typ svého použití. Tímto typem je myšleno použití divoké karty na konci hledaného výrazu, což znamená, že známe jen začátek záznamu. DRUHY INDEXŮ
PRIMARY - sloupec primárního klíče, jednoznačně identifikuje záznam, je jen jeden v tabulce UNIQUE - podobný jako předchozí, může jich být více v jedné tabulce INDEX - urychluje vyhledávání bez podmínky unikátnosti záznamů FULLTEXT - optimalizuje full-textové vyhledávání hash funkcemi A teď popis vlastní metody. Měří se doba trvání příkazu SELECT, který byl nejdříve aplikován na neindexovaný sloupec a následně na sloupec s indexem. Tyto dva sloupce mají stejný datový typ a data, která obsahují, jsou rovněž totožná. Totožnost dat by měla být zachována kvůli minimalizaci chyb, které ovlivňují výsledný čas. V tomto měření jsou použity různé datové typy sloupců a například u typu VARCHAR je měření rozděleno na alfabeticky seřazené záznamy (jména, příjmení) a na náhodně vygenerované textové řetězce o stejné délce. V těchto dvou případech není jisté, jestli stejný datový typ a stejný počet záznamů bude znamenat tentýž rozdíl ve výsledném čase. V kapitole s
Praktická část 44 výsledky je tento problém, na základě naměřených dat, dále zpracován. Kromě již zmíněného typu VARCHAR jsou použity ještě typy INT a DATETIME.
Měření času, potřebného na zpracování dotazu, v závislosti na počtu propojovaných tabulek Klauzule INNER JOIN spojuje tabulky přes jeden z atributů a používá se jako součást příkazu SELECT. Čas, potřebný pro vykonání takového příkazu, se zvyšuje s přibývajícím počtem spojovaných tabulek. Úkolem tohoto měření je zjistit, do jaké míry je výsledný čas ovlivněn počtem tabulek. Dalším cílem měření je zjistit, zda pořadí tabulek ovlivňuje výsledný čas. Kdyby pořadí tabulek v dotazu ovlivňovalo čas, jednalo by se o jednoduchou optimalizační metodu a urychlení dotazu by při jejím použití bylo velmi snadné.
Praktická část
45
3.2 Výsledky V této kapitole se nachází tabulky a grafy naměřených hodnot. Po podrobné analýze naměřených dat je možné odpovědět na otázky, položené v úvodní části. Tyto odpovědi jsou doloženy naměřenými hodnotami.
Jaké je zatíţení serveru, respektive čas vykonání dotazu na něm závislý, při konkurenčním přístupu? Vzrůstání časové náročnosti v závislosti na počtu současných přístupů k serveru odpovídá následující graf.
Graf 1: Vliv konkurenčních přístupů
Při hledání odpovědi na tuto otázku se vyskytl problém, jak simulovat současný přístup více uživatelů z jednoho počítače a na lokální server. Tento problém byl vyřešen pomocí vláken, spuštěných v měřící aplikaci. Každé z těchto vláken odesílá na server dotaz SELECT. Na vodorovné ose grafu je počet konkurenčních přístupů, respektive spuštěných vláken, dotazujících se do
Praktická část 46 databáze. Svislá osa pak zobrazuje čas v milisekundách. Každý tento čas reprezentuje dobu, potřebnou na vykonání dotazu nejdéle spuštěného vlákna. Z tvarů křivek, patřících jednotlivým platformám, lze usoudit, že vtah počtu přístupů a času, potřebného pro vykonání dotazu, je téměř lineární. Tento fakt značí, že počet konkurenčních přístupů nemá na zatížení serveru takový vliv, aby bylo nutné provádět nějaká další optimalizační či omezující opatření. Maximální počet spuštěných vláken se zastavil na čísle 100, ale k serveru, nasazenému v nějaké větší síti, je připojeno mnohem více než 100 uživatelů. Zde je důležité zdůraznit, že všichni připojení uživatelé neodesílají ve stejný okamžik dotazy do stejné databáze, natož do stejné tabulky. Pravděpodobnost nastání takového jevu je dost malá na to, aby 100 současně spuštěných vláken postačilo k relevantnímu měření.
Gaussovy křivky pro měření konkurenčního přístupu na jednotlivých platformách Následující grafy znázorňují Gaussovy křivky, vzniklé z naměřených hodnot při měření vlivu konkurenčního přístupu. Gaussova křivka znázorňuje normální rozdělení pravděpodobnosti, které je určeno směrodatnou odchylkou a aritmetickým průměrem. To znamená, že každé naměřené hodnotě se přiřadí pravděpodobnost jejího výskytu. V místě, kde křivka dosahuje svého maxima, se nachází aritmetický průměr a v minimech jsou nejvyšší a nejnižší naměřené hodnoty. První tři grafy znázorňují výsledky měření na jednotlivých platformách, přičemž každá křivka odpovídá jinému počtu přístupů. Jelikož jsou tvary křivek velmi podobné, následují další tři grafy sloužící lepšímu porovnání platforem. Zde jednotlivé křivky představují platformy a každý graf se věnuje konkrétnímu počtu přístupů. U všech grafů je na vodorovné ose uveden čas v milisekundách a na svislé ose nacházíme pravděpodobnost, se kterou se daná hodnota vyskytuje v daném výběru.
Praktická část
47
Graf 2: Gaussovy křivky MySQL
Graf 3: Gaussovy křivky MSSQL
Graf 4: Gaussovy křivky Oracle
Praktická část
48
Graf 5: Gaussovy křivky pro 5 vláken
Graf 6: Gaussovy křivky pro 50 vláken
Graf 7: Gaussovy křivky pro 100 vláken
Praktická část 49 Tyto grafy neslouží primárně ke srovnávání velikosti výkonu, ale spíše k porovnání stability serveru a dosaženého výkonu při zatížení množstvím konkurenčních přístupů. Při pohledu na průměrné hodnoty je závislost výkonu a počtu přístupů lineární, naproti tomu při zpracování totožných dat jiným způsobem se objevují nové skutečnosti. Hlavním aspektem je stabilita dosahovaných výkonů. Stabilita dosaženého výkonu při větším množství vláken prudce klesá.
Má počet spojení tabulek, realizovaných v dotazu, vliv na rychlost vyhodnocení dotazu? Následující graf zobrazuje hodnoty, získané při měření různého počtu spojení v dotazu. Na vodorovné ose je uveden počet tabulek, přes které dotaz vyhledával data. Na svislé ose se nachází čas vyřizování dotazu v milisekundách.
Graf 8: Vliv počtu tabulek v dotazu
Praktická část 50 Položená otázka má díky tomuto měření jednoznačnou odpověď. Ano, počet tabulek, spojených v jednom dotazu za pomoci příkazu JOIN, má vliv na rychlost vyřízení dotazu. Graf zobrazuje, jakou měrou se podílí počet tabulek na zatížení serveru. U platforem MySQL a MSSQL se jeví vztah zmiňovaných veličin opět jako lineární. Ovšem u Oracle je zatížení serveru, způsobené spojovaným dotazem, ovlivňováno méně. Ačkoli je rozdíl v časech mezi MySQL a Oracle minimální, důležitý je i tvar výsledné křivky.
Záleţí na pořadí tabulek v dotazu? Pro zodpovězení této otázky bylo nutné vyzkoušet několik různých variant dotazu. V každém dotaze se objevují stejné tabulky, jen v jiném pořadí. Při tomto měření docházelo, zvláště u serveru MySQL, k obrovským výkyvům naměřených hodnot. Z tohoto důvodu se daná měření prováděla v mnohokrát větším rozsahu, než se běžně provádějí měření ostatní. Tabulky jsou příliš rozsáhlé na to, aby byly v práci uvedeny celé. Následují pouze reprezentativní vzorky, které však dostatečně zastupují hodnoty celé tabulky. Výsledky měření napovídají tomu, že poznatky o funkci optimalizátoru dotazů jednotlivých platforem korespondují se skutečným chováním serveru. Průměrné naměřené hodnoty si jsou skutečně velmi podobné a z toho lze usoudit, že na pořadí tabulek v dotazu opravdu nezáleží.
Praktická část
51
MySQL T1, T2, T3
T3, T2, T1
T2, T3, T1
T2, T1, T3
průměr
72,66
74,84
73,38
73,92
minimum
28,02
29,12
29,14
29,05
maximum
199,13
132,98
133,32
144,31
26,90
25,94
25,63
26,73
směr. odchylka
Tabulka 1: Vliv pořadí tabulek MySQL
MSSQL T1, T2, T3
T3, T2, T1
T2, T3, T1
T2, T1, T3
průměr
98,51
97,98
99,34
97,16
minimum
83,01
82,36
82,20
80,77
maximum
119,80
112,99
115,33
115,20
8,58
8,65
8,66
8,56
směr. odchylka
Tabulka 2: Vliv pořadí tabulek MSSQL
Oracle T1, T2, T3
T3, T2, T1
T2, T3, T1
T2, T1, T3
průměr
65,98
67,07
64,76
65,48
minimum
41,00
41,17
40,02
40,01
maximum
90,97
90,85
90,00
89,98
směr. odchylka
14,73
14,35
14,27
14,91
Tabulka 3: Vliv pořadí tabulek Oracle
Toto měření bylo na všech vybraných platformách provedeno 1000 krát, z důvodů popsaných výše.
Praktická část 52 Jak velký vliv mají indexy na rychlost vykonání příkazu SELECT? Následující grafy odpovídají na otázku vlivu indexace. Vodorovná osa slouží pouze k popsání datového typu, kterému dopovídá daný sloupec. Svislá osa pak opět zobrazuje čas vykonávání dotazu v milisekundách. Sloupce jsou rozděleny na dvě barvy. Modrá barva znázorňuje hodnotu času, potřebného pro vykonání dotazu nad sloupcem bez indexu. Červená barva odpovídá dotazu nad indexovaným sloupcem. Pod každým grafem je ještě uvedeno procentuelní vyjádření urychlení dotazu nad sloupci s různými datovými typy.
Graf 9: Vliv indexace MySQL
Náhodné řetězce (rnd_str) 61 %
Numerická data (int) 68%
Jména a příjmení (alp_str) 31 %
Časové záznamy (datetime) 66 %
Praktická část
53
Graf 10: Vliv indexace MSSQL
Náhodné řetězce (rnd_str) 56 %
Numerická data (int) 80%
Jména a příjmení (alp_str) 67 %
Časové záznamy (datetime) 77 %
Graf 11: Vliv indexace Oracle
Náhodné řetězce (rnd_str) 67 %
Numerická data (int) 68%
Jména a příjmení (alp_str) 63 %
Časové záznamy (datetime) 69 %
Praktická část
54
Hlavním úkolem tohoto měření bylo zjistit, do jaké míry indexy ovlivňují rychlost dotazu. Vedlejším, nikoli méně významným, úkolem se pak stalo zjišťování, zda je vliv indexace závislý na datovém typu sloupce. Urychlení dotazu se pohybuje v přibližném rozmezí 30 - 80%, což je rozmezí značně široké. Nejlepší výsledek v tomto měření patří platformě MSSQL, která dosáhla až 80% zrychlení vyřízení dotazu nad sloupcem s datovým typem INT. Naopak spodní hranice rozmezí přísluší platformě MySQL, která urychlila dotaz nad sloupcem s datovým typem VARCHAR, naplněným jmény, jen o 31%. Oba cíle byly tedy splněny se zjištěním, že vliv indexace je velmi značný, a že datový typ také velkou měrou ovlivňuje urychlení dotazu. Při tomto testu se všechny platformy chovaly velice rozdílně, hlavně v případě vlivu datových typů.
Závěr
55
4 Závěr Tato práce je zaměřena na relační databázové platformy a jejich výkonnost. V poslední době má daná problematika nejen ve světě výpočetních technologií velký význam a z tohoto důvodu se má práce snaží přispět k jejímu osvětlení. Hlavní cíle této práce se podařilo s většími či menšími obtížemi splnit (např. vytvoření generátoru dat a měřících nástrojů). Měřící metody byly patrně vhodně zvoleny, neboť jimi naměřené hodnoty poukazují na některé jevy, které před provedením experimentu nebyly zcela jasné, a chování serverů v takovýchto situacích nebylo jednoznačně známé. Asi nejdůležitější skutečností, zjištěnou v průběhu experimentu, je vliv datového typu a obsahu sloupce na urychlení vyhledávání za pomoci indexů. Z teoretických pramenů je funkce indexů jasná. Index slouží k urychlení vyhledávání dat sloupce, nad kterým je definován. Ovšem vliv datového typu a obsahu sloupce na rychlost vyhledávání není doposud v literatuře dobře popsán. Experiment, provedený v této práci, se snaží přispět k prohloubení poznání této problematiky. V případě měření vlivu konkurenčních přístupů si vedl z hlediska výsledného času nejlépe server Oracle, ačkoli ostatní platformy dosáhly rovněž velmi dobrých výsledků. Ovšem z hlediska stability dosahovaného výkonu byl nejlepší MSSQL server. Měření vlivu počtu spojení tabulek v dotazu ukázalo, že servery MySQL a Oracle dokázaly zpracovat dotazy s klauzulí INNER JOIN téměř ve stejném čase. Z tabulek, vytvořených při tomto měření, je patrné, že server MSSQL vyřizuje dotazy o něco déle, než jeho dva konkurenti, ale zato disponuje vyšší stabilitou. Vyhledávání za pomoci indexů bylo nejvíce urychleno na platformě MSSQL, která dosáhla, jak už bylo jednou zmíněno až 80% urychlení dotazu. Na serverech MySQL a Oracle bylo vyhledávání zrychleno o cca. 60%.
Závěr 56 Na základě tohoto stručného shrnutí není možné jednoznačně určit, zda je například platforma Oracle nejlepší, protože dosahovala nejlepších výsledků ve dvou ze tří testů, a zda MSSQL server je nejhorší z důvodu pomalejšího zpracování dotazů. Lze pouze konstatovat, že platformy MySQL a Oracle (obě vyvíjí Oracle Corporation) jsou o něco rychlejší než MSSQL, která naopak podává nejstabilnější výkony.
Reference [1]
DUBOIS, Paul. InformIT [online]. 22.4.2005 [cit. 2010-12-01]. MySQL Query Optimization. Dostupné z WWW:
.
[2]
MySQL 5.1 Manual [online]. 2009 [cit. 2010-12-01]. Overview of Partitioning in MySQL. Dostupné z WWW: .
[3]
MySQL 5.1 Manual [online]. 2009 [cit. 2010-12-01]. Physical Row Structure. Dostupné z WWW: .
[4]
MySQL 5.1 Manual [online]. 2009 [cit. 2010-12-01]. Physical Structure of an Index. Dostupné z WWW: .
[5]
MySQL 5.1 Manual [online]. 2009 [cit. 2010-12-05]. Optimization Overview. Dostupné z WWW: .
[6]
MySQL 5.1 Manual [online]. 2009 [cit. 2010-12-05]. Optimizing Statements. Dostupné z WWW: .
[7]
MySQL 5.1 Manual [online]. 2009 [cit. 2010-12-05]. Controlling Query Plan Evaluation. Dostupné z WWW: .
[8]
DUBOIS, Paul. InformIT [online]. 22.4.2005 [cit. 2010-12-06]. MySQL Query Optimization. Dostupné z WWW: .
[9]
MySQL. In Wikipedia : the free encyclopedia [online]. St. Petersburg (Florida), 29.11.2006, last modified on 9.11.2010 [cit. 2010-12-06]. Dostupné z WWW: .
[10]
Microsoft SQL Server. In Wikipedia : the free encyclopedia [online]. St.
Petersburg (Florida), 24.10.2006, last modified on 29.7.2010 [cit. 2010-12-06]. Dostupné z WWW: .
[11]
MSDN [online]. 18.6.2009 [cit. 2010-12-06]. Table and Index
Organization. Dostupné z WWW: .
[12]
MSDN [online]. 2009 [cit. 2010-12-06]. Heap Structures. Dostupné z
WWW: .
[13]
MSDN [online]. 2009 [cit. 2010-12-06]. Clustered Index Structures.
Dostupné z WWW: .
[14]
MSDN [online]. 2009 [cit. 2010-12-06]. Nonclustered Index Structures.
Dostupné z WWW: .
[15]
MSDN [online]. 2009 [cit. 2010-12-06]. SQL Statement Processing.
Dostupné z WWW: .
[16]
Oracle. In Wikipedia : the free encyclopedia [online]. St. Petersburg
(Florida) : Wikipedia Foundation, 2.9.2005, last modified on 2.9.2010 [cit. 201012-01]. Dostupné z WWW: .
[17]
DBA-Oracle [online]. 2010 [cit. 2010-12-01]. Oracle Consulting.
Dostupné z WWW: .
[18]
Oracle9i Database Administrator guide [online]. 2002 [cit. 2010-12-01].
Managing Tables. Dostupné z WWW: .
[19]
O'Reilly Media. Codewalkers [online]. 28.2.2008 [cit. 2010-12-01]. The
Basics of Data Structures in Oracle. Dostupné z WWW:
.
[20]
Oracle [online]. 2009 [cit. 2010-12-01]. Segmentace Oracle. Dostupné z
WWW: .
[21]
Oracle9i Database Performance Tuning Guide and Reference [online].
2002 [cit. 2010-12-01]. Introduction to the Optimizer. Dostupné z WWW: .
[22]
Oracle Call Interface Programmer [online]. 2000 [cit. 2010-12-01]. SQL
Statement Processing. Dostupné z WWW: .
[23]
Oracle Wiki [online]. 2008 [cit. 2010-12-04]. ODBC. Dostupné z WWW:
.
[24]
Index (databáze). In Wikipedia : the free encyclopedia [online]. St.
Petersburg (Florida) : Wikipedia Foundation, 25.8.2006, last modified on 9.11.2010 [cit. 2010-12-06]. Dostupné z WWW: .
[25]
VRÁNA, Jakub. Root [online]. 22.7.2003 [cit. 2010-12-06]. Využití
databázových indexů. Dostupné z WWW: .
Seznam obrázků Obrázek 1: Průběh optimalizace MySQL ......................................................... 15 Obrázek 2:Organizace tabulek MSSQL ........................................................... 18 Obrázek 3: Průběh optimalizace MSSQL ......................................................... 21 Obrázek 4: Organizace tabulek Oracle ............................................................. 26 Obrázek 5: Průběh optimalizace Oracle ........................................................... 29 Obrázek 6: Průběh zpracování dotazů Oracle ................................................... 35 Obrázek 7: Blokové schéma aplikace ............................................................... 36
Seznam grafů Graf 1: Vliv konkurenčních přístupů ................................................................ 45 Graf 2: Gaussovy křivky MySQL ..................................................................... 47 Graf 3: Gaussovy křivky MSSQL .................................................................... 47 Graf 4: Gaussovy křivky Oracle ....................................................................... 47 Graf 5: Gaussovy křivky pro 5 vláken .............................................................. 48 Graf 6: Gaussovy křivky pro 50 vláken ............................................................ 48 Graf 7: Gaussovy křivky pro 100 vláken .......................................................... 48 Graf 8: Vliv počtu tabulek v dotazu.................................................................. 49 Graf 9: Vliv indexace MySQL.......................................................................... 52 Graf 10: Vliv indexace MSSQL ....................................................................... 53 Graf 11: Vliv indexace Oracle .......................................................................... 53
Seznam tabulek Tabulka 1: Vliv pořadí tabulek MySQL ........................................................... 51 Tabulka 2: Vliv pořadí tabulek MSSQL ........................................................... 51 Tabulka 3: Vliv pořadí tabulek Oracle ............................................................. 51
Seznam příloh Přílohy jsou v elektronické verzi součástí práce ve formátu pdf a pro tištěnou verzi na přiloženém CD. Příloha 1: Vlákna (Microsoft Office Excel) Příloha 2: INNER_JOIN (Microsoft Office Excel) Příloha 3: Indexy (Microsoft Office Excel) Příloha 4: Aplikace DB_perform (Microsoft Visual Studio, pouze na CD)
Vlákna Následující tabulky a grafy vzkly při měření konkurenčních přístupů za pomoci vláken.
Vliv konkurenčního přístupu měřený na MySQL MySQL 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 průměr
1 0,50 0,42 0,44 0,41 0,43 0,42 0,38 0,40 0,50 0,47 0,39 0,42 0,39 0,39 0,39 0,40 0,38 0,37 0,40 0,38 0,41
5 2,04 0,82 0,63 0,64 1,69 0,57 0,68 1,02 2,33 2,35 0,89 1,09 1,17 1,78 0,72 1,36 1,13 0,85 2,16 1,83 1,29
10 6,33 5,66 4,68 1,42 1,28 0,91 0,94 4,30 1,93 1,61 1,05 3,21 5,44 0,88 1,51 2,36 1,12 2,88 2,37 3,77 2,68
15 8,89 8,35 3,27 4,27 14,90 2,51 1,95 8,35 1,12 16,21 5,00 2,30 7,64 2,84 2,11 1,74 3,08 6,33 5,22 1,77 5,39
20 8,04 30,17 1,56 5,01 1,10 42,08 1,98 7,88 7,27 5,06 1,49 7,62 16,64 3,61 28,53 1,78 4,45 8,71 1,67 24,26 10,44
25 16,81 1,80 1,73 6,60 22,12 2,25 9,58 22,83 13,84 28,52 1,23 23,11 12,94 2,29 7,25 3,72 75,15 1,33 22,54 7,65 14,16
30 5,51 42,31 4,72 3,49 61,71 4,83 5,67 4,62 1,48 2,16 13,83 17,41 18,51 24,14 10,47 17,74 4,09 5,61 20,50 66,02 16,74
35 60,80 46,91 7,32 4,96 50,27 2,60 10,30 28,58 7,25 15,12 3,32 23,21 12,79 36,67 3,66 10,20 11,75 3,77 6,41 7,44 17,67
40 6,75 19,02 77,29 16,29 27,11 47,72 13,89 18,33 6,76 6,73 4,74 93,92 8,36 1,89 28,25 33,65 1,81 24,64 15,26 9,08 23,07
45 4,74 72,34 3,23 36,31 7,65 75,70 5,67 4,56 12,94 3,13 29,32 23,98 19,18 34,98 28,97 84,13 41,13 5,31 8,33 11,59 25,66
50 6,65 27,11 5,44 12,15 21,89 28,53 30,51 35,46 95,24 10,50 7,12 65,16 9,11 5,02 53,96 57,70 2,36 10,98 13,78 50,63 27,46
55 12,07 7,11 27,42 16,23 13,68 21,07 7,66 134,73 21,57 57,27 30,84 31,73 6,62 54,40 6,94 46,65 17,73 87,12 17,83 23,42 32,10
60 13,33 11,86 18,55 5,50 82,91 73,50 23,02 6,64 3,20 17,75 198,24 3,11 7,50 11,57 49,00 47,82 25,26 8,40 7,32 101,04 35,78
65 40,29 18,95 26,23 85,79 5,67 219,60 30,79 8,81 17,87 15,05 7,62 22,12 31,07 29,36 14,73 8,29 20,38 183,23 7,06 43,23 41,81
70 11,58 13,98 6,34 136,20 15,77 50,63 28,58 12,20 24,60 32,99 53,61 11,15 41,62 13,34 36,67 97,20 15,36 23,33 14,72 217,92 42,89
75 32,27 49,45 81,25 17,65 197,27 34,90 36,49 22,89 89,27 30,93 22,17 11,11 63,48 23,35 31,90 10,30 28,40 47,71 19,62 22,75 43,66
80 22,95 36,96 61,01 23,89 38,49 115,16 52,98 30,80 60,50 24,30 91,90 40,80 83,13 20,15 171,56 39,13 24,37 21,37 18,52 13,93 49,59
85 26,34 134,55 43,57 70,47 106,64 49,19 35,31 19,15 28,02 32,04 40,29 45,83 27,86 148,33 45,64 101,94 21,30 37,35 25,12 20,82 52,99
90 40,76 48,62 49,95 30,52 52,29 132,87 29,67 24,07 71,89 29,99 47,40 35,46 69,79 91,91 50,62 33,38 66,87 57,72 60,36 60,04 54,21
95 24,40 83,11 27,65 43,68 188,20 81,57 44,47 30,09 27,85 34,62 91,21 62,24 47,35 86,83 53,29 37,68 39,71 23,27 58,91 68,33 57,72
100 97,35 134,73 37,42 92,36 25,80 49,72 64,77 62,61 39,65 72,66 51,63 7,32 57,70 65,81 35,45 50,44 42,46 5,67 91,61 219,60 65,24
Vliv konkurenčního přístupu měřený na MSSQL MSSQL 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 průměr
1 0,70 0,46 0,52 0,80 0,47 0,45 0,44 0,67 0,84 0,69 0,47 0,44 0,71 0,60 0,46 0,42 0,61 0,89 0,89 0,63 0,61
5 2,25 3,18 1,39 1,27 1,34 2,54 1,62 1,60 1,38 1,68 2,27 1,11 1,75 1,49 1,30 5,09 1,16 3,20 1,22 1,57 1,92
10 10,27 7,08 20,97 7,02 7,47 4,17 3,46 7,99 5,43 6,02 15,84 19,36 8,07 1,65 2,20 1,91 8,80 1,63 3,70 1,98 7,25
15 31,62 10,64 12,25 4,88 4,28 2,92 5,29 3,64 3,28 4,47 30,53 4,62 2,51 5,38 3,18 10,71 5,49 7,25 7,04 5,63 8,28
20 16,19 3,34 13,71 43,09 4,29 2,87 4,94 21,14 5,01 8,38 2,26 32,50 3,48 24,26 9,91 13,64 4,18 24,88 4,71 7,26 12,50
25 18,05 29,37 35,22 3,99 4,01 6,93 2,29 5,30 3,35 4,32 6,70 42,42 7,76 29,65 10,66 23,97 9,04 6,09 12,26 11,19 13,63
30 48,95 63,62 45,32 4,23 22,17 4,52 5,23 15,66 5,80 11,49 10,37 7,78 3,97 14,26 15,91 2,77 4,07 35,89 35,11 4,29 18,07
35 55,30 27,16 51,22 3,48 31,58 17,11 9,28 4,66 9,20 23,94 3,99 57,05 8,97 22,34 5,04 8,31 52,10 4,02 33,47 22,13 22,52
40 42,86 34,15 30,70 4,66 87,75 6,65 4,54 10,58 30,00 18,65 48,53 4,60 109,45 4,33 61,75 3,07 6,13 8,04 21,94 2,44 27,04
45 157,48 73,01 60,84 4,01 4,08 6,59 20,70 29,01 14,94 5,31 8,07 9,45 16,54 7,95 5,34 116,06 7,14 30,29 60,30 16,30 32,67
50 109,67 69,20 10,17 5,77 57,23 2,51 32,95 32,68 7,94 69,70 11,91 18,67 2,27 29,83 9,44 100,39 72,39 3,28 28,94 5,22 34,01
55 39,50 74,71 122,63 11,87 3,27 8,27 7,12 11,31 27,24 38,88 9,98 62,43 6,01 36,53 23,49 10,15 14,78 157,82 55,80 4,77 36,33
60 94,62 144,43 28,53 10,85 9,70 90,24 47,01 9,82 16,64 138,29 35,76 16,35 11,45 43,49 21,67 17,13 20,21 17,12 10,03 15,27 39,93
65 25,24 40,42 7,06 17,08 57,48 4,65 9,29 185,75 31,93 6,90 6,79 12,45 10,83 7,78 8,33 60,64 111,84 22,25 208,92 8,13 42,19
70 8,08 188,14 44,77 18,78 72,29 21,33 9,93 3,36 16,99 60,49 8,42 229,63 196,94 4,36 90,08 5,61 35,91 62,77 9,55 9,22 54,83
75 65,59 64,64 98,60 5,60 14,51 21,30 18,96 36,69 32,34 43,62 193,05 58,81 61,70 118,43 102,25 10,68 65,61 23,82 131,93 24,76 59,64
80 127,47 74,92 32,26 14,62 62,42 5,57 16,65 21,70 21,42 46,31 71,01 98,68 110,69 70,27 61,91 54,61 134,91 57,27 105,92 58,17 62,34
85 99,69 42,14 55,60 46,41 108,88 19,66 30,26 53,54 93,79 90,60 21,43 41,40 10,42 56,64 50,52 227,65 96,55 24,26 49,46 63,47 64,12
90 159,37 37,30 40,05 92,16 29,29 34,56 56,55 14,68 67,11 56,15 116,46 30,53 23,72 100,23 36,07 92,58 28,57 54,39 88,16 128,43 64,32
95 293,28 32,81 38,04 59,75 99,29 26,34 23,67 32,50 55,71 33,04 82,62 66,98 64,08 34,62 17,38 32,81 71,30 22,42 163,91 68,79 65,97
100 210,90 26,50 60,09 92,43 77,99 113,37 77,80 40,92 12,18 99,43 21,17 75,05 42,09 68,58 23,52 140,88 36,62 27,71 26,81 78,33 67,62
Vliv konkurenčního přístupu měřený na Oracle Oracle 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 průměr
1 1,40 1,50 1,54 1,61 3,19 1,99 1,78 1,73 1,50 1,49 1,91 1,44 1,08 0,16 1,97 0,13 1,29 1,90 0,71 1,81 1,51
5 2,09 2,87 2,75 2,21 3,11 3,18 2,42 2,62 3,63 2,70 1,48 2,63 2,05 1,09 1,38 2,94 1,42 2,55 2,93 2,21 2,41
10 4,13 6,09 3,43 2,61 3,16 3,37 2,22 2,63 3,49 4,92 4,51 1,85 3,08 2,47 2,52 2,66 3,77 2,94 4,60 1,90 3,32
15 5,10 4,20 3,19 2,85 7,03 3,37 3,34 3,28 6,16 6,04 2,35 3,02 2,42 5,03 3,37 3,74 3,03 7,53 7,38 7,44 4,49
20 3,20 10,90 3,07 4,93 4,01 11,53 5,24 7,61 9,88 5,29 3,78 5,54 7,24 3,25 8,87 8,31 5,65 3,80 6,46 3,54 6,11
25 6,62 6,09 6,84 4,15 7,90 14,91 11,48 6,69 7,30 6,34 4,33 4,58 3,10 14,82 3,24 7,40 7,03 10,78 6,56 5,58 7,29
30 3,44 9,25 17,95 7,55 11,02 14,08 10,76 10,79 4,16 3,44 8,86 11,90 5,53 9,60 12,53 12,42 5,80 8,43 11,77 12,57 9,59
35 7,30 9,40 32,69 7,64 12,63 15,07 18,70 16,70 13,54 10,94 11,67 10,48 10,56 11,84 11,92 9,52 17,79 13,77 9,45 16,54 13,41
40 5,04 7,24 20,10 14,98 29,32 37,31 37,49 24,54 15,01 14,82 21,74 23,89 17,06 22,12 16,19 24,47 21,92 15,21 15,33 17,70 20,07
45 25,81 28,37 23,28 7,14 17,30 23,39 35,39 12,08 39,61 14,49 19,87 25,87 17,35 25,85 16,71 23,07 20,90 23,73 22,56 20,49 22,16
50 21,05 33,94 22,45 18,56 32,21 25,72 13,82 18,50 29,92 32,00 19,56 27,19 19,91 27,68 23,28 25,44 26,73 22,57 22,66 24,20 24,37
55 19,28 29,67 31,51 23,05 13,69 49,72 21,58 19,17 40,16 22,89 23,13 25,70 29,95 22,63 24,40 23,65 26,80 28,27 30,75 28,35 26,72
60 21,26 40,47 54,98 28,96 15,23 16,96 17,36 46,58 16,30 49,24 24,90 26,53 24,43 33,93 26,58 34,09 27,26 28,70 30,54 29,70 29,70
65 33,49 15,91 66,18 26,48 31,53 38,58 31,31 67,89 12,21 36,59 37,06 41,11 35,36 21,58 36,86 39,69 39,24 33,73 33,61 41,13 35,98
70 29,72 19,50 23,29 42,75 22,07 55,94 33,76 37,35 31,96 85,48 42,56 33,76 39,68 35,85 40,95 44,11 40,28 43,73 34,28 42,30 38,97
75 24,59 41,92 41,97 58,44 31,87 32,33 48,22 59,91 69,98 25,56 50,01 38,21 40,77 39,93 45,51 43,07 45,97 36,50 44,37 39,10 42,91
80 70,97 66,34 39,61 31,51 26,69 35,43 22,30 65,69 34,98 53,51 47,88 37,13 48,20 39,83 38,36 47,31 44,79 47,83 36,98 50,53 44,29
85 39,63 78,96 45,50 36,15 21,41 67,32 40,47 41,29 33,49 49,52 51,10 53,82 50,65 53,19 37,55 44,75 50,57 48,48 45,17 33,76 46,14
90 106,94 24,91 22,72 27,92 78,49 30,67 32,88 33,94 24,27 88,42 38,12 48,79 47,66 40,56 51,33 45,44 51,12 49,05 52,03 46,98 47,11
95 50,71 20,10 29,63 40,46 64,08 76,46 77,87 46,29 29,97 69,13 45,90 53,23 40,57 53,55 47,99 53,89 47,05 45,60 45,06 49,29 49,34
100 81,35 27,18 70,09 25,47 24,76 94,48 34,54 61,49 80,38 31,10 51,69 60,80 53,53 50,06 54,47 44,22 50,82 54,60 44,98 44,32 52,02
Celkový graf měření konkurenčních přístupů 80
70 60
50 MySQL
40
MSSQL
30
Oracle
20
10 0 1
5
10
15
20
25
30
35
40
45
50
55
60
65
70
75
80
85
90
95
100
Gaussovy křivky pro MSSQL prum směr
5 thr 50 thr 100 thr 7,10741 34,00793 67,61761 2,156083 5,508373 18,86945 5 thr 13,57566 13,36005 13,14444 12,92884 12,71323 12,49762 12,28201 12,0664 11,85079 11,63519 11,41958 11,20397 10,98836 10,77275 10,55714 10,34154 10,12593 9,910318 9,69471 9,479102 9,263493 9,047885 8,832277 8,616668 8,40106 8,185452 7,969843 7,754235 7,538627 7,323018 7,10741 6,891802 6,676193 6,460585 6,244977 6,029368 5,81376 5,598152 5,382543 5,166935 4,951327 4,735718 4,52011 4,304502 4,088893
50 thr 50,53305 49,98221 49,43137 48,88054 48,3297 47,77886 47,22803 46,67719 46,12635 45,57551 45,02468 44,47384 43,923 43,37216 42,82133 42,27049 41,71965 41,16882 40,61798 40,06714 39,5163 38,96547 38,41463 37,86379 37,31295 36,76212 36,21128 35,66044 35,1096 34,55877 34,00793 33,45709 32,90626 32,35542 31,80458 31,25374 30,70291 30,15207 29,60123 29,05039 28,49956 27,94872 27,39788 26,84704 26,29621
100 thr 124,226 122,339 120,4521 118,5651 116,6782 114,7912 112,9043 111,0174 109,1304 107,2435 105,3565 103,4696 101,5826 99,69568 97,80874 95,92179 94,03484 92,1479 90,26095 88,37401 86,48706 84,60012 82,71317 80,82623 78,93928 77,05234 75,16539 73,27845 71,3915 69,50456 67,61761 65,73066 63,84372 61,95677 60,06983 58,18288 56,29594 54,40899 52,52205 50,6351 48,74816 46,86121 44,97427 43,08732 41,20038
5 thr 0,002056 0,002761 0,003671 0,004833 0,0063 0,00813 0,010387 0,013138 0,016453 0,0204 0,025041 0,030433 0,036617 0,04362 0,051446 0,060071 0,069444 0,079481 0,090064 0,101041 0,112227 0,123411 0,13436 0,144825 0,154551 0,163289 0,170805 0,176889 0,181367 0,184108 0,185031 0,184108 0,181367 0,176889 0,170805 0,163289 0,154551 0,144825 0,13436 0,123411 0,112227 0,101041 0,090064 0,079481 0,069444
NormDist 50 thr 0,00080457 0,00108063 0,00143699 0,00189184 0,00246588 0,00318212 0,00406554 0,00514254 0,00644012 0,00798486 0,00980162 0,01191201 0,01433275 0,01707384 0,02013677 0,02351286 0,02718179 0,03111056 0,03525289 0,03954928 0,0439278 0,0483056 0,05259113 0,05668714 0,0604942 0,06391458 0,06685643 0,06923783 0,0709906 0,07206348 0,0724247 0,07206348 0,0709906 0,06923783 0,06685643 0,06391458 0,0604942 0,05668714 0,05259113 0,0483056 0,0439278 0,03954928 0,03525289 0,03111056 0,02718179
100 thr 0,00023487 0,00031546 0,00041949 0,00055227 0,00071984 0,00092893 0,00118681 0,00150121 0,00188 0,00233094 0,00286129 0,00347736 0,00418402 0,0049842 0,00587833 0,00686388 0,00793491 0,0090818 0,01029103 0,01154523 0,01282341 0,01410138 0,01535241 0,01654812 0,01765947 0,01865795 0,01951674 0,02021192 0,02072358 0,02103678 0,02114223 0,02103678 0,02072358 0,02021192 0,01951674 0,01865795 0,01765947 0,01654812 0,01535241 0,01410138 0,01282341 0,01154523 0,01029103 0,0090818 0,00793491
3,873285 3,657676 3,442068 3,22646 3,010851 2,795243 2,579635 2,364026 2,148418 1,93281 1,717201 1,501593 1,285985 1,070376 0,854768 0,63916 0,423551 0,207943 -0,007665 -0,223274 -0,438882 -0,65449 -0,870099
25,74537 25,19453 24,6437 24,09286 23,54202 22,99118 22,44035 21,88951 21,33867 20,78783 20,237 19,68616 19,13532 18,58449 18,03365 17,48281 16,93197 16,38114 15,8303 15,27946 14,72862 14,17779 13,62695
39,31343 37,42648 35,53954 33,65259 31,76565 29,8787 27,99176 26,10481 24,21787 22,33092 20,44398 18,55703 16,67009 14,78314 12,8962 11,00925 9,122305 7,235359 5,348414 3,461469 1,574524 -0,312422 -2,199367
0,060071 0,051446 0,04362 0,036617 0,030433 0,025041 0,0204 0,016453 0,013138 0,010387 0,00813 0,0063 0,004833 0,003671 0,002761 0,002056 0,001515 0,001106 0,000799 0,000572 0,000405 0,000284 0,000197
0,02351286 0,02013677 0,01707384 0,01433275 0,01191201 0,00980162 0,00798486 0,00644012 0,00514254 0,00406554 0,00318212 0,00246588 0,00189184 0,00143699 0,00108063 0,00080457 0,00059306 0,00043281 0,00031272 0,0002237 0,00015843 0,00011109 7,71E-05
0,00686388 0,00587833 0,0049842 0,00418402 0,00347736 0,00286129 0,00233094 0,00188 0,00150121 0,00118681 0,00092893 0,00071984 0,00055227 0,00041949 0,00031546 0,00023487 0,00017313 0,00012635 9,13E-05 6,53E-05 4,62E-05 3,24E-05 2,25E-05
MSSQL
Pravděpodobnost 0,20
0,18 0,16 0,14
0,12 0,10 0,08 0,06 0,04
0,02 0,00 0
20
40
5 vláken
60
80
50 vláken
100
120
100 vláken
140 Čas [ms]
Gaussovy křivky pro MySQL prum směr
5 thr 50 thr 100 thr 6,91394 27,46401 65,23782 2,036798 4,910744 18,58539 5 thr 13,02433 12,82066 12,61698 12,4133 12,20962 12,00594 11,80226 11,59858 11,3949 11,19122 10,98754 10,78386 10,58018 10,3765 10,17282 9,969137 9,765458 9,561778 9,358098 9,154418 8,950738 8,747058 8,543379 8,339699 8,136019 7,932339 7,728659 7,524979 7,3213 7,11762 6,91394 6,71026 6,50658 6,302901 6,099221 5,895541 5,691861 5,488181 5,284501 5,080822 4,877142 4,673462 4,469782 4,266102 4,062422
50 thr 42,19624 41,70517 41,21409 40,72302 40,23194 39,74087 39,2498 38,75872 38,26765 37,77657 37,2855 36,79442 36,30335 35,81227 35,3212 34,83013 34,33905 33,84798 33,3569 32,86583 32,37475 31,88368 31,39261 30,90153 30,41046 29,91938 29,42831 28,93723 28,44616 27,95508 27,46401 26,97294 26,48186 25,99079 25,49971 25,00864 24,51756 24,02649 23,53541 23,04434 22,55327 22,06219 21,57112 21,08004 20,58897
100 thr 120,994 119,1354 117,2769 115,4184 113,5598 111,7013 109,8427 107,9842 106,1257 104,2671 102,4086 100,5501 98,69151 96,83298 94,97444 93,1159 91,25736 89,39882 87,54028 85,68174 83,8232 81,96466 80,10613 78,24759 76,38905 74,53051 72,67197 70,81343 68,95489 67,09635 65,23782 63,37928 61,52074 59,6622 57,80366 55,94512 54,08658 52,22804 50,3695 48,51097 46,65243 44,79389 42,93535 41,07681 39,21827
5 thr 0,002176 0,002922 0,003886 0,005116 0,006669 0,008606 0,010995 0,013908 0,017417 0,021594 0,026508 0,032215 0,038762 0,046175 0,054458 0,063589 0,073511 0,084136 0,095339 0,106958 0,1188 0,130639 0,142229 0,153306 0,163602 0,172852 0,180808 0,187249 0,191989 0,19489 0,195867 0,19489 0,191989 0,187249 0,180808 0,172852 0,163602 0,153306 0,142229 0,130639 0,1188 0,106958 0,095339 0,084136 0,073511
NormDist 50 thr 0,00090248 0,00121215 0,00161186 0,00212207 0,00276597 0,00356938 0,00456031 0,00576838 0,00722387 0,00895661 0,01099446 0,01336169 0,01607703 0,0191517 0,02258738 0,02637433 0,03048977 0,03489667 0,0395431 0,04436236 0,04927374 0,05418431 0,05899138 0,06358587 0,06785624 0,07169287 0,07499274 0,07766396 0,07963003 0,08083348 0,08123866 0,08083348 0,07963003 0,07766396 0,07499274 0,07169287 0,06785624 0,06358587 0,05899138 0,05418431 0,04927374 0,04436236 0,0395431 0,03489667 0,03048977
100 thr 0,00023846 0,00032028 0,0004259 0,00056071 0,00073084 0,00094312 0,00120495 0,00152416 0,00190874 0,00236657 0,00290502 0,00353051 0,00424797 0,00506038 0,00596817 0,00696879 0,00805619 0,00922061 0,01044832 0,01172169 0,01301941 0,01431691 0,01558706 0,01680104 0,01792939 0,01894312 0,01981504 0,02052084 0,02104033 0,02135831 0,02146537 0,02135831 0,02104033 0,02052084 0,01981504 0,01894312 0,01792939 0,01680104 0,01558706 0,01431691 0,01301941 0,01172169 0,01044832 0,00922061 0,00805619
3,858743 3,655063 3,451383 3,247703 3,044023 2,840343 2,636664 2,432984 2,229304 2,025624 1,821944 1,618264 1,414585 1,210905 1,007225 0,803545 0,599865 0,396185 0,192506 -0,011174 -0,214854 -0,418534 -0,622214
20,09789 19,60682 19,11575 18,62467 18,1336 17,64252 17,15145 16,66037 16,1693 15,67822 15,18715 14,69608 14,205 13,71393 13,22285 12,73178 12,2407 11,74963 11,25855 10,76748 10,27641 9,785332 9,294257
37,35973 35,50119 33,64265 31,78412 29,92558 28,06704 26,2085 24,34996 22,49142 20,63288 18,77434 16,9158 15,05727 13,19873 11,34019 9,481649 7,62311 5,764571 3,906032 2,047493 0,188955 -1,669584 -3,528123
0,063589 0,054458 0,046175 0,038762 0,032215 0,026508 0,021594 0,017417 0,013908 0,010995 0,008606 0,006669 0,005116 0,003886 0,002922 0,002176 0,001604 0,001171 0,000846 0,000605 0,000428 0,0003 0,000209
0,02637433 0,02258738 0,0191517 0,01607703 0,01336169 0,01099446 0,00895661 0,00722387 0,00576838 0,00456031 0,00356938 0,00276597 0,00212207 0,00161186 0,00121215 0,00090248 0,00066524 0,00048548 0,00035078 0,00025092 0,00017771 0,00012461 8,65E-05
0,00696879 0,00596817 0,00506038 0,00424797 0,00353051 0,00290502 0,00236657 0,00190874 0,00152416 0,00120495 0,00094312 0,00073084 0,00056071 0,0004259 0,00032028 0,00023846 0,00017577 0,00012828 9,27E-05 6,63E-05 4,70E-05 3,29E-05 2,29E-05
MySQL
Pravděpodobnost 0,20 0,18 0,16 0,14 0,12 0,10 0,08 0,06 0,04 0,02
0,00 0
20
40
5 vláken
60
80
50 vláken
100
120
100 vláken
140 Čas [ms]
Gaussovy křivky pro Oracle prum směr
5 thr 50 thr 100 thr 8,50752 24,36913 52,01608 2,592601 5,069576 18,65315 5 thr 16,28532 16,02606 15,7668 15,50754 15,24828 14,98902 14,72976 14,4705 14,21124 13,95198 13,69272 13,43346 13,1742 12,91494 12,65568 12,39642 12,13716 11,8779 11,61864 11,35938 11,10012 10,84086 10,5816 10,32234 10,06308 9,80382 9,54456 9,2853 9,02604 8,76678 8,50752 8,24826 7,989 7,72974 7,47048 7,21122 6,951959 6,692699 6,433439 6,174179 5,914919 5,655659 5,396399
50 thr 39,57786 39,0709 38,56394 38,05698 37,55003 37,04307 36,53611 36,02915 35,5222 35,01524 34,50828 34,00132 33,49437 32,98741 32,48045 31,97349 31,46654 30,95958 30,45262 29,94566 29,43871 28,93175 28,42479 27,91783 27,41088 26,90392 26,39696 25,89 25,38305 24,87609 24,36913 23,86217 23,35521 22,84826 22,3413 21,83434 21,32738 20,82043 20,31347 19,80651 19,29955 18,7926 18,28564
100 thr 107,9755 106,1102 104,2449 102,3796 100,5143 98,64896 96,78364 94,91833 93,05301 91,1877 89,32238 87,45707 85,59175 83,72644 81,86112 79,99581 78,13049 76,26518 74,39986 72,53454 70,66923 68,80391 66,9386 65,07328 63,20797 61,34265 59,47734 57,61202 55,74671 53,88139 52,01608 50,15076 48,28544 46,42013 44,55481 42,6895 40,82418 38,95887 37,09355 35,22824 33,36292 31,49761 29,63229
5 thr 0,001709 0,002296 0,003053 0,004019 0,005239 0,006761 0,008638 0,010926 0,013683 0,016965 0,020825 0,025309 0,030452 0,036276 0,042784 0,049957 0,057752 0,066099 0,0749 0,084028 0,093331 0,102633 0,111738 0,12044 0,128529 0,135796 0,142047 0,147106 0,15083 0,15311 0,153877 0,15311 0,15083 0,147106 0,142047 0,135796 0,128529 0,12044 0,111738 0,102633 0,093331 0,084028 0,0749
NormDist 50 thr 0,00087421 0,00117417 0,00156136 0,00205558 0,00267931 0,00345755 0,00441744 0,00558765 0,00699755 0,00867599 0,01065 0,01294306 0,01557333 0,01855167 0,02187971 0,02554802 0,02953452 0,03380334 0,0383042 0,04297247 0,04772998 0,05248669 0,05714316 0,0615937 0,06573027 0,0694467 0,07264319 0,07523072 0,07713519 0,07830094 0,07869343 0,07830094 0,07713519 0,07523072 0,07264319 0,0694467 0,06573027 0,0615937 0,05714316 0,05248669 0,04772998 0,04297247 0,0383042
100 thr 0,00023759 0,00031912 0,00042435 0,00055867 0,00072819 0,0009397 0,00120058 0,00151862 0,0019018 0,00235797 0,00289447 0,00351768 0,00423254 0,00504199 0,00594649 0,00694347 0,00802693 0,00918711 0,01041036 0,01167911 0,01297211 0,01426489 0,01553043 0,01674001 0,01786425 0,01887431 0,01974305 0,02044629 0,02096389 0,02128072 0,02138739 0,02128072 0,02096389 0,02044629 0,01974305 0,01887431 0,01786425 0,01674001 0,01553043 0,01426489 0,01297211 0,01167911 0,01041036
5,137139 4,877879 4,618619 4,359358 4,100098 3,840838 3,581578 3,322318 3,063058 2,803798 2,544538 2,285278 2,026018 1,766757 1,507497 1,248237 0,988977 0,729717 0,470457 0,211197 -0,04806 -0,30732 -0,56658 -0,82584 -1,0851
17,77868 17,27172 16,76477 16,25781 15,75085 15,24389 14,73694 14,22998 13,72302 13,21606 12,70911 12,20215 11,69519 11,18823 10,68128 10,17432 9,66736 9,160403 8,653445 8,146488 7,63953 7,132572 6,625615 6,118657 5,6117
27,76697 25,90166 24,03634 22,17103 20,30571 18,4404 16,57508 14,70977 12,84445 10,97914 9,113821 7,248505 5,38319 3,517875 1,652559 -0,21276 -2,07807 -3,94339 -5,8087 -7,67402 -9,53933 -11,4046 -13,27 -15,1353 -17,0006
0,066099 0,057752 0,049957 0,042784 0,036276 0,030452 0,025309 0,020825 0,016965 0,013683 0,010926 0,008638 0,006761 0,005239 0,004019 0,003053 0,002296 0,001709 0,00126 0,00092 0,000664 0,000475 0,000337 0,000236 0,000164
0,03380334 0,02953452 0,02554802 0,02187971 0,01855167 0,01557333 0,01294306 0,01065 0,00867599 0,00699755 0,00558765 0,00441744 0,00345755 0,00267931 0,00205558 0,00156136 0,00117417 0,00087421 0,0006444 0,00047027 0,00033979 0,00024306 0,00017214 0,0001207 8,38E-05
0,00918711 0,00802693 0,00694347 0,00594649 0,00504199 0,00423254 0,00351768 0,00289447 0,00235797 0,0019018 0,00151862 0,00120058 0,0009397 0,00072819 0,00055867 0,00042435 0,00031912 0,00023759 0,00017514 0,00012781 9,23E-05 6,61E-05 4,68E-05 3,28E-05 2,28E-05
Oracle
Pravděpodobnost 0,20 0,18 0,16
0,14 0,12
0,10 0,08 0,06
0,04 0,02
0,00 0
20
40 5 vláken
60 50 vláken
80
100 100 vláken
120 Čas [ms]
Gaussovy křivky pro různé počty vláken
5 vláken
Pravděpodobnost 0,25
0,20
0,15
0,10
0,05
0,00 0
5
10 MySQL
20 Čas [ms]
15
MSSQL
Oracle
50 vláken
Pravděpodobnost 0,10
0,08
0,06
0,04
0,02
0,00 0
10
20 MySQL
30 MSSQL
40
50 Oracle
60 Čas [ms]
100 vláken
Pravděpodobnost 0,025
0,020
0,015
0,010
0,005
0,000 0
20
40
60 MySQL
80 MSSQL
100 Oracle
120
140 Čas [ms]
INNER JOIN Následující tabulky a grafy vzkly při měření vlivu počtu tabulek v dotazu.
Vliv počtu tabulek v dotazu MSSQL 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 průměr
MySQL 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 průměr
Počet spojení (INNER JOIN) 2 3 4 5 77,6246 99,0438 115,7498 122,1182 77,453 109,438 118,0071 140,6923 77,1635 97,8374 118,5163 152,2222 77,8762 91,6292 138,6577 141,3657 88,1511 97,6022 118,5464 140,6815 77,3121 103,4772 118,0855 128,7916 77,9555 113,5354 131,8959 158,6468 77,4065 90,2436 117,9105 128,5624 83,5209 91,2049 131,8685 140,7637 74,1192 102,5793 127,0117 141,2964 78,7535 90,797 124,3766 120,658 76,9312 85,2976 129,5548 141,3053 79,2159 113,3778 119,8758 156,6461 76,9433 112,6248 137,4802 153,0111 77,0658 101,3768 116,6169 137,7979 79,1916 91,1288 120,4005 133,1628 77,0318 86,1791 127,4066 135,953 76,9256 110,2569 111,0798 154,572 78,3466 96,7581 136,2778 135,2193 79,4338 106,3355 123,6328 120,0618 78,421085 99,53617 124,14756 139,176405 Počet spojení (INNER JOIN) 2 3 4 5 44,8094 76,6626 72,312 64,3485 33,4809 62,752 112,2932 130,1752 39,882 63,1702 72,786 77,0759 30,8617 76,3842 86,569 80,8886 37,6594 68,7802 79,5355 196,485 46,7919 73,2714 75,5874 109,6622 45,1294 68,551 80,8212 98,3698 33,7923 83,7947 93,8424 96,1576 41,5277 67,0733 86,6976 91,4669 49,5763 64,3462 91,987 96,9099 48,8219 64,7951 94,5962 113,5275 47,0132 71,3702 92,548 123,1494 38,6257 82,7941 104,1476 116,0343 42,5762 67,1283 106,2961 101,5289 44,2202 60,1311 96,0051 125,1139 34,2621 81,6191 93,4799 94,4873 47,4718 80,0679 102,9631 112,5915 35,1168 72,9594 108,9031 91,7239 47,9037 82,1607 82,9868 106,6055 36,0635 87,4139 95,2616 100,8035 41,279305 72,76128 91,48094 106,355265
Oracle 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 průměr
Čas [ms]
Počet spojení (INNER JOIN) 2 3 4 5 42,2056 70,4115 84,8198 117,6203 73,2714 63,1779 77,3121 113,2441 40,3071 68,6523 72,8645 82,7941 76,9312 66,3627 108,1009 98,2439 33,5084 62,037 102,1081 93,2337 35,4294 69,0783 81,9621 95,7846 44,6007 63,3702 88,0105 115,6518 35,0162 61,5341 77,9137 72,8645 41,3311 62,8753 93,367 83,5606 26,4112 77,3121 102,3683 98,9194 30,3476 62,1199 79,2799 75,5874 59,5177 72,347 78,4766 104,5736 38,7378 59,5177 106,6314 116,3864 38,9692 62,9131 105,969 101,1771 83,5209 60,2768 107,1582 97,3127 41,7787 73,408 99,4409 90,8681 32,6569 63,1234 104,9893 76,659 33,1447 59,7996 75,823 124,0659 40,6693 72,1244 72,3488 99,0553 68,7802 72,6172 93,0753 126,2332 45,856765 66,152925 90,60097 99,191785
Čas na vyřízení dotazu v závislosti na počtu spojení v dotazu
160 140 120
100 80
60 40
20 0 2
3
MySQL
4
MSSQL
5
Oracle
Počet tabulek
Vliv pořadí tabulek v dotazu T1 T2 T3
Employee Bill Customer MySQL
T1, T2, T3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
128,19 39,69 91,85 199,13 50,01 44,81 40,03 49,50 40,72 52,60 96,18 112,47 47,15 61,40 109,29 88,48 84,97 60,19 74,18 76,23 91,57 34,91 102,88 95,55 59,62 57,18 62,06 107,16 108,76 36,36 94,30 60,72 86,34 114,61 72,99 103,62 31,66 64,19 37,03 85,33 64,82 32,29
T3, T2, T1
132,98 54,16 40,29 109,46 86,70 51,60 41,56 49,86 87,27 94,81 117,09 42,05 44,82 71,89 76,52 98,12 43,76 32,50 57,68 113,21 43,01 43,70 114,63 80,85 117,51 81,00 108,90 110,03 80,68 77,55 64,20 92,26 93,61 78,45 52,69 113,27 89,15 50,97 112,45 37,54 51,62 110,02
MSSQL
T2, T3, T1
70,57 40,52 129,40 51,71 133,32 40,66 55,23 50,31 130,78 40,15 67,20 57,83 68,89 34,58 89,09 113,55 84,64 109,63 83,70 78,91 83,04 89,45 36,02 91,53 65,63 111,01 96,19 107,71 42,44 71,15 91,97 118,43 105,15 75,75 54,03 30,46 50,95 105,38 75,87 95,42 46,53 45,05
T2, T1, T3
40,05 40,23 137,38 109,19 41,16 57,16 52,91 44,90 144,31 74,39 80,46 63,70 53,42 108,08 40,00 107,71 94,00 114,06 69,47 72,77 36,64 38,51 46,38 48,18 81,39 41,67 117,05 57,27 117,91 52,27 48,18 100,95 60,82 77,19 113,00 89,95 91,95 78,94 60,86 74,90 47,70 73,75
T1, T2, T3
100,41 84,57 95,77 92,06 103,02 110,00 99,54 88,23 119,80 94,54 96,51 97,65 106,35 107,73 94,77 99,89 86,01 100,55 91,27 95,60 96,74 101,53 85,25 86,56 93,18 95,09 112,09 101,98 106,78 94,25 94,62 107,06 93,74 83,05 94,69 112,41 88,34 93,71 110,94 99,55 90,25 94,21
T3, T2, T1
102,75 83,11 104,20 102,60 108,98 102,12 82,36 111,85 100,74 98,73 86,46 98,18 106,13 108,30 111,55 99,33 86,95 85,61 111,40 88,14 94,11 96,52 97,93 92,33 102,19 84,97 109,48 92,58 103,27 83,45 98,97 98,07 109,87 84,63 97,01 92,65 100,79 110,99 112,98 103,87 107,52 102,75
T2, T3, T1
109,53 98,02 94,18 115,33 109,04 90,29 82,20 109,37 98,38 89,81 86,96 106,96 111,60 109,86 97,80 95,94 101,40 97,27 105,07 89,36 104,80 85,22 91,98 99,59 101,09 92,36 91,74 92,76 108,32 95,98 86,28 87,89 101,66 96,98 88,83 97,92 91,58 97,27 111,53 105,93 86,25 92,34
T2, T1, T3
95,75 109,58 108,02 80,77 83,06 87,52 92,05 102,08 107,46 115,20 98,49 85,92 105,21 89,56 83,66 90,25 85,98 94,81 101,56 94,01 93,46 96,24 111,03 106,07 103,16 105,93 91,13 91,60 110,18 84,85 82,27 107,35 90,13 108,79 91,97 111,72 93,38 99,09 82,86 109,76 94,19 107,89
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
114,49 36,56 36,20 54,76 35,18 72,41 46,36 51,49 111,14 32,36 98,71 40,73 87,69 32,87 39,76 113,91 49,07 96,16 50,39 74,30 90,08 76,86 43,99 117,75 97,15 65,26 97,69 73,25 59,36 109,40 41,42 85,32 48,58 42,13 81,10 49,53 84,76 87,70 43,28 78,67 90,30 37,98 59,69 40,55 78,51 100,89 72,11 41,27 68,22 85,59
114,77 50,26 105,01 112,64 41,39 102,96 56,90 117,34 36,12 82,30 79,31 57,74 87,93 38,12 81,00 55,78 55,68 56,95 62,29 82,25 97,30 40,28 58,28 88,02 70,75 70,12 31,60 70,64 69,50 83,92 110,81 33,14 37,03 88,62 82,04 116,79 76,34 77,26 45,04 65,37 53,08 88,84 77,17 97,69 49,66 73,88 90,67 60,95 51,99 45,30
44,93 100,43 98,19 72,16 48,39 49,64 33,25 82,93 73,94 51,37 84,46 97,80 58,48 46,28 92,05 115,16 99,95 52,92 60,09 117,10 78,86 50,85 93,21 59,27 53,81 112,25 54,81 68,71 45,00 37,28 118,20 70,17 67,07 106,10 118,67 80,41 114,15 102,76 48,91 36,12 42,92 30,89 40,71 107,97 75,55 96,35 118,70 38,36 64,07 67,66
106,21 94,67 90,69 35,53 47,22 78,91 104,16 43,38 104,02 51,59 93,19 117,04 73,38 111,12 65,37 34,51 90,05 36,14 37,88 74,24 111,14 96,48 64,65 37,20 91,13 34,18 69,90 31,67 49,69 44,30 98,95 40,84 42,04 49,79 35,02 54,96 75,00 89,58 69,50 87,85 54,72 67,28 56,88 34,78 30,42 111,40 92,21 71,97 30,91 57,35
93,45 109,01 94,60 105,51 109,15 89,83 110,54 88,35 89,07 88,66 88,02 109,65 105,91 85,86 89,84 83,12 90,61 104,89 108,02 103,78 110,49 98,04 86,53 106,36 105,21 92,17 85,72 83,31 99,24 91,47 98,90 91,05 87,10 100,31 107,31 98,21 95,39 104,70 98,85 99,21 86,71 86,02 98,85 84,52 100,41 93,61 105,20 90,03 89,47 110,01
97,56 96,64 101,52 110,67 94,74 102,40 101,39 102,61 109,69 107,63 109,41 94,10 100,33 100,71 100,15 102,99 92,76 100,32 95,40 83,98 85,63 91,86 87,50 94,60 93,09 112,12 103,04 108,09 88,35 84,29 111,21 86,23 85,65 85,84 107,31 88,49 103,85 98,26 87,52 111,09 111,98 93,48 88,52 92,27 110,49 87,07 93,72 84,88 98,04 105,50
99,03 105,83 87,67 98,38 104,19 92,39 104,18 103,58 100,53 97,76 102,37 87,67 92,01 109,27 102,45 111,83 84,77 95,54 112,59 109,48 94,08 90,07 92,07 101,72 110,13 95,55 108,52 105,14 111,03 100,11 108,20 107,23 92,45 95,91 108,10 102,96 104,95 95,56 88,04 95,21 96,14 95,47 86,35 84,48 85,23 102,92 85,76 104,17 93,00 107,84
107,36 110,00 102,83 107,45 96,56 111,10 100,13 110,86 86,01 104,74 87,07 98,94 98,23 99,10 89,32 95,84 94,95 96,92 87,89 85,48 85,52 89,83 93,47 96,89 109,06 100,41 95,11 103,79 106,00 95,44 89,75 87,17 85,14 102,66 101,04 102,25 108,27 100,67 107,72 98,08 104,69 87,19 102,03 93,31 89,70 85,19 95,69 88,38 91,07 103,26
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
102,86 41,67 110,88 85,01 30,81 35,07 99,24 91,84 56,66 115,54 67,61 78,09 53,35 31,51 82,39 50,95 86,98 103,84 42,43 33,47 32,14 75,75 66,74 36,25 64,31 114,79 50,10 41,22 54,06 62,57 103,13 63,64 78,13 66,82 63,87 89,88 81,50 71,30 36,81 87,54 50,79 37,30 67,46 91,55 102,62 76,10 32,50 84,93 94,89 45,30
84,04 67,43 99,67 82,68 35,20 70,42 37,24 87,83 42,21 82,92 53,97 64,93 78,09 38,86 118,58 29,19 105,11 96,23 87,23 34,87 81,08 85,02 46,07 99,45 31,52 101,04 64,27 31,64 86,49 108,69 80,74 90,48 46,28 79,99 72,42 44,91 42,73 59,20 60,38 95,47 56,66 103,47 99,97 100,59 36,11 81,16 60,37 55,84 64,14 103,92
60,24 54,59 50,51 55,14 29,68 73,26 111,97 41,08 45,57 32,72 46,89 81,44 111,22 66,25 33,46 61,15 72,42 97,91 86,42 87,62 66,74 116,83 34,49 67,02 79,03 44,83 32,70 70,47 87,84 89,01 38,04 37,54 57,34 98,50 47,23 68,76 111,42 56,45 111,75 63,43 100,39 91,02 54,53 38,78 115,30 52,80 96,64 75,37 87,43 75,72
67,31 40,68 104,10 89,45 49,45 49,73 32,32 29,05 76,84 76,28 117,44 98,65 38,88 51,30 76,71 79,54 45,30 67,98 81,75 68,20 47,61 78,57 45,19 61,39 47,42 68,17 62,04 61,99 77,48 79,96 105,37 111,53 108,69 77,74 109,03 70,78 65,33 35,37 109,20 70,92 75,86 38,10 53,39 43,14 112,44 68,11 45,48 60,84 91,03 90,50
111,48 99,43 104,12 105,69 112,32 107,70 104,07 93,82 106,26 99,28 84,07 104,40 112,89 97,20 87,69 97,03 111,53 91,65 87,69 92,40 85,35 98,26 100,63 110,67 108,44 90,94 110,63 111,86 105,15 96,81 102,56 99,30 107,78 105,18 106,70 102,10 111,14 88,71 99,47 107,34 112,80 93,70 96,56 86,31 100,42 109,01 89,51 105,53 107,23 95,82
95,55 106,04 109,49 95,83 98,60 111,66 94,97 93,95 108,63 84,57 93,82 111,33 88,12 87,97 107,65 105,09 105,45 103,39 88,32 100,68 85,48 106,31 99,48 103,38 94,09 84,90 112,18 87,58 101,46 108,78 93,46 83,86 108,86 109,95 91,96 105,53 84,38 97,86 84,63 106,69 96,76 100,72 101,85 86,58 91,11 106,74 96,80 92,63 96,91 96,68
104,68 111,79 99,42 110,86 87,15 84,88 103,34 104,67 108,31 88,94 96,90 109,57 98,70 111,91 92,23 91,14 91,53 99,75 90,60 112,65 98,16 94,91 90,74 91,70 87,00 94,98 109,84 96,79 109,35 93,80 98,98 101,90 110,87 102,12 108,94 97,21 94,51 98,27 100,93 94,74 97,23 108,28 110,28 93,42 87,74 111,86 92,17 88,49 101,46 84,36
105,81 89,86 93,37 97,17 96,04 110,09 95,37 102,56 98,00 96,08 104,37 94,94 109,48 106,19 83,24 92,76 82,28 90,95 95,34 106,33 97,22 106,21 104,02 103,07 111,67 106,32 100,63 97,43 93,30 109,91 98,33 85,26 102,19 84,19 84,74 85,21 87,14 99,53 98,20 88,91 104,74 87,37 94,03 86,37 105,86 98,14 94,89 105,18 84,55 97,55
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
56,27 105,54 84,08 45,75 82,85 39,48 62,84 56,05 30,10 46,10 65,87 117,77 57,58 103,09 105,56 78,20 83,37 48,98 111,56 88,36 52,95 112,97 72,06 92,21 44,58 109,64 89,10 107,44 52,08 47,04 49,10 107,05 53,92 105,02 83,33 38,46 65,84 102,47 111,02 52,27 106,63 109,28 87,93 74,53 71,78 91,85 58,64 38,16 33,89 89,57
75,80 115,60 60,89 108,66 112,83 55,27 97,41 63,91 110,21 92,23 72,98 110,38 104,02 79,79 68,50 101,21 78,81 115,51 91,23 40,89 36,13 88,26 102,32 65,94 117,38 113,18 68,60 68,54 109,58 98,33 58,10 49,43 30,08 93,94 69,88 48,68 37,81 42,36 57,64 79,51 84,62 101,05 79,63 98,95 62,42 83,12 70,79 79,98 109,24 50,73
93,94 102,33 81,41 111,62 64,01 78,89 69,25 48,72 60,07 52,79 50,00 77,91 116,64 30,27 110,93 101,49 50,67 92,85 80,36 68,88 83,49 63,94 96,37 59,50 67,80 30,58 44,72 72,72 64,91 61,94 63,65 92,47 48,06 87,79 77,37 42,99 86,38 46,74 84,60 43,60 56,52 104,11 111,22 58,52 45,99 70,66 118,49 73,95 99,91 94,69
87,62 73,17 115,65 98,05 116,99 37,34 30,64 68,99 53,81 51,49 75,40 102,45 82,35 83,93 116,23 89,86 74,97 53,90 62,93 41,62 85,12 44,94 59,09 37,54 32,37 80,88 98,19 116,24 101,04 80,61 33,84 35,74 57,23 104,05 61,54 84,34 89,64 107,40 49,87 38,50 52,07 108,61 88,79 37,32 117,03 37,33 60,53 80,78 33,43 84,11
109,73 109,15 106,15 112,79 96,24 92,28 93,11 107,85 89,85 108,27 103,44 100,37 107,64 109,44 94,66 110,32 84,99 97,25 110,20 110,29 99,31 109,33 86,62 103,12 103,90 92,95 94,16 87,43 86,51 93,14 91,55 95,78 93,99 90,36 102,57 110,02 111,56 104,36 100,27 91,18 112,75 105,49 93,96 111,88 108,04 86,41 108,77 83,01 110,09 112,12
100,72 85,41 92,51 108,61 104,30 98,98 102,18 92,59 108,30 90,01 105,32 102,18 88,02 84,25 84,85 95,14 88,11 86,73 103,19 94,10 112,51 109,99 100,80 85,28 97,73 106,15 102,44 110,27 84,91 90,31 96,60 99,86 109,38 106,55 85,60 110,67 110,15 83,24 96,67 100,38 111,78 106,32 85,25 97,75 88,83 103,76 111,07 102,39 111,02 85,20
87,14 110,14 100,15 103,33 95,14 91,90 84,57 94,27 88,29 84,61 100,19 113,08 84,60 111,18 94,98 104,08 111,99 102,30 94,69 106,73 103,97 85,99 98,01 109,71 108,89 94,30 96,41 107,93 88,80 87,94 90,46 113,39 97,16 113,01 112,06 111,46 100,30 112,59 88,01 101,02 106,20 95,45 103,39 103,50 89,68 88,55 101,80 98,19 113,66 100,34
109,54 111,26 98,62 85,47 83,98 107,19 84,02 86,82 86,76 107,67 83,71 94,23 87,97 105,31 92,40 95,01 102,66 111,21 104,93 106,79 109,69 91,79 111,36 83,40 104,95 83,33 103,85 97,22 85,76 84,58 106,81 85,66 98,85 97,44 82,94 84,20 110,06 104,35 93,62 88,83 109,40 99,41 92,11 91,84 86,77 84,99 107,24 110,09 99,65 89,14
193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242
45,69 81,86 69,44 47,84 51,42 74,25 100,95 43,61 45,60 63,36 64,33 76,83 83,27 38,78 93,66 63,04 58,70 34,18 31,05 102,22 91,67 51,07 52,46 31,39 70,50 115,46 72,33 43,86 41,76 49,19 56,43 38,60 29,47 110,11 107,98 80,14 98,17 86,73 34,47 78,16 49,73 56,23 90,94 77,01 75,21 31,28 101,64 109,28 78,66 32,80
82,46 73,10 44,26 36,63 69,08 49,26 30,26 93,71 55,18 106,39 57,77 79,03 53,10 48,29 51,16 70,08 65,84 111,15 40,70 108,30 77,14 73,30 46,35 38,20 35,85 91,72 62,85 66,83 109,47 103,07 32,79 62,29 85,14 105,18 59,57 81,59 55,56 105,17 54,27 103,92 118,01 48,40 70,74 92,56 66,09 51,66 107,81 52,75 98,20 89,05
92,55 114,06 87,03 113,79 76,75 38,80 96,76 86,86 102,60 78,99 94,13 83,55 110,48 29,14 109,24 115,70 106,46 109,75 80,79 70,88 54,54 118,43 108,66 111,23 105,63 41,18 61,74 115,58 114,40 42,17 31,80 109,28 100,40 113,29 107,89 55,03 41,67 92,19 41,17 89,25 80,78 55,27 38,77 60,12 74,32 101,17 86,29 106,48 86,71 86,49
52,05 44,50 96,24 48,13 57,58 30,93 112,08 60,98 114,47 36,53 41,52 34,33 69,29 117,13 34,09 60,80 52,00 50,21 109,39 106,42 80,96 118,41 30,16 64,27 45,59 103,58 60,09 116,74 117,84 33,46 51,08 35,23 49,21 90,93 104,14 37,56 83,66 114,18 76,65 57,29 109,71 114,48 52,77 70,16 31,50 49,05 60,40 44,50 109,77 45,81
94,32 97,12 112,31 83,81 96,78 108,87 90,17 88,54 106,92 96,38 84,35 98,60 96,52 88,17 99,70 96,48 90,15 106,65 91,63 98,03 111,13 95,06 88,25 88,67 100,47 89,99 102,62 85,03 107,87 103,45 87,83 90,75 92,38 101,09 94,53 90,16 94,42 95,91 110,45 95,19 93,50 100,08 97,47 108,64 85,76 108,40 111,06 109,12 109,68 105,81
83,52 89,87 107,10 89,52 95,69 107,38 92,86 93,66 107,24 106,65 109,04 93,24 110,16 104,85 97,62 91,42 100,40 94,43 100,91 98,97 83,96 92,50 83,29 96,10 105,00 99,72 89,44 92,96 87,97 111,66 94,38 83,80 94,41 107,92 97,93 85,92 105,82 102,93 104,87 90,63 104,63 87,49 84,57 88,14 85,41 91,60 111,84 100,63 111,53 85,59
84,85 106,74 113,89 106,13 97,20 107,14 90,10 90,02 86,53 106,06 99,49 108,28 111,36 110,74 108,78 102,48 98,25 113,89 97,63 98,75 103,52 85,99 110,02 94,47 101,47 87,46 111,47 108,52 84,47 109,61 113,01 93,67 101,31 104,96 87,32 101,45 85,01 96,99 97,82 95,88 84,43 88,33 104,15 101,99 96,48 109,98 107,87 106,62 89,38 95,58
107,60 92,79 108,84 93,64 84,17 106,50 97,24 101,42 89,70 91,43 98,66 90,26 107,09 92,70 84,67 104,75 93,09 111,33 83,77 97,52 103,66 104,98 110,59 95,62 99,54 107,88 92,82 99,20 91,10 110,80 97,69 98,41 94,07 85,44 90,31 93,47 87,79 103,88 108,31 91,26 100,72 85,56 106,88 94,56 97,77 82,94 107,73 82,03 85,35 99,87
243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292
77,93 74,49 111,83 89,33 88,44 99,68 45,08 113,59 38,89 109,08 110,90 79,67 113,30 57,14 51,38 43,41 65,76 82,31 47,83 55,87 50,22 58,10 65,36 35,74 90,32 41,67 95,97 107,64 59,84 76,62 72,54 33,30 51,38 51,44 70,64 61,29 80,04 102,70 79,48 51,60 48,59 68,95 47,50 87,44 107,97 114,38 54,68 61,71 42,04 103,04
73,93 106,51 53,11 67,81 29,24 77,63 86,91 36,03 80,98 103,89 68,30 97,25 57,93 92,48 56,09 65,08 82,77 67,06 42,71 40,36 56,90 78,18 78,62 30,97 94,23 45,79 62,78 84,20 44,61 46,34 64,95 74,91 104,46 31,86 72,02 108,86 104,47 81,54 96,58 92,69 110,74 96,07 111,61 93,81 43,23 109,54 75,79 115,36 64,64 59,09
94,63 61,97 58,11 32,69 31,77 68,77 95,90 82,25 74,63 44,02 33,81 99,55 36,12 64,85 102,23 78,43 77,18 76,94 66,33 114,00 95,66 37,73 108,03 68,73 91,61 116,01 76,62 67,91 104,80 108,21 93,18 107,80 48,01 50,55 62,65 103,18 91,18 54,40 93,05 89,06 91,66 43,20 51,54 109,91 96,62 38,62 69,73 54,55 99,30 75,87
71,46 67,05 73,27 116,68 41,79 48,34 76,76 79,54 40,59 115,46 96,52 110,34 111,04 48,21 73,46 55,76 70,50 102,44 54,90 118,00 100,77 30,24 55,88 76,59 104,63 62,30 101,73 33,95 79,09 40,46 33,76 46,68 73,45 108,03 113,12 52,22 83,97 88,98 74,66 33,03 75,62 62,86 36,99 115,73 69,87 108,19 98,52 113,03 81,34 95,84
102,09 91,07 89,05 100,22 89,16 86,35 96,49 86,63 90,17 91,85 98,96 83,62 103,86 89,34 98,30 84,24 104,61 99,25 89,51 109,43 109,63 96,92 102,49 111,47 111,26 108,70 95,89 91,69 85,67 94,35 108,25 103,90 86,87 102,84 111,86 95,75 91,85 112,91 98,08 112,19 110,74 94,26 96,34 108,82 93,85 88,54 86,53 100,62 111,53 107,78
97,53 101,78 110,64 112,41 107,37 90,29 104,31 111,75 90,54 105,82 89,67 107,07 102,48 111,89 89,00 112,18 106,65 87,18 83,36 100,42 100,78 92,72 88,99 109,66 109,84 94,40 106,28 94,83 104,54 86,43 103,09 88,81 94,06 98,09 87,77 105,89 111,32 89,43 93,10 110,67 101,30 112,39 101,60 94,49 91,32 97,47 90,16 105,50 100,52 93,11
94,38 94,27 111,65 96,90 85,85 86,20 86,96 101,57 110,00 84,44 106,67 100,63 97,59 103,18 91,81 107,07 96,82 99,63 85,87 96,01 106,67 112,57 96,65 111,83 92,19 106,19 95,95 108,68 109,73 108,31 113,23 103,24 85,01 107,26 96,96 99,99 101,99 104,07 105,98 90,81 104,83 111,07 85,61 104,47 113,85 107,33 86,12 84,52 84,71 99,39
95,02 92,28 86,38 103,55 84,71 92,00 105,67 86,78 99,98 99,52 102,56 110,50 90,45 101,45 105,68 104,55 103,44 105,61 92,84 94,45 87,85 95,79 96,03 86,16 98,23 95,14 104,05 88,90 84,85 111,70 104,26 105,41 110,76 89,34 108,56 94,74 99,14 92,82 85,14 82,26 90,48 108,55 88,63 105,68 89,90 97,51 107,70 103,92 84,05 107,71
293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342
36,64 51,05 113,86 35,71 41,18 34,87 80,94 64,90 35,12 34,77 92,82 78,50 89,00 28,91 88,11 77,53 86,22 73,58 57,40 28,36 65,95 54,70 108,09 99,35 53,46 84,04 114,07 56,28 35,77 62,95 105,18 32,04 85,55 48,35 67,82 80,69 38,71 59,77 74,86 82,59 46,65 84,20 71,51 78,58 109,22 73,56 29,05 73,24 109,26 33,35
82,16 72,71 60,32 114,90 47,08 69,59 110,50 68,66 46,43 118,23 96,22 92,25 40,35 59,05 74,22 42,11 50,62 38,75 51,03 94,59 88,81 83,08 98,30 85,02 60,30 44,96 86,10 59,37 69,23 82,00 117,90 64,99 112,35 60,29 64,69 65,16 92,41 80,93 83,63 72,83 93,32 92,21 33,19 71,14 54,73 55,02 69,73 84,76 67,62 42,42
99,88 61,03 99,79 57,35 59,04 46,79 40,82 75,06 30,68 78,68 38,33 101,76 78,21 95,97 110,73 84,42 77,80 53,81 56,13 66,46 48,55 80,71 66,31 73,62 47,22 76,11 96,83 98,46 36,60 72,58 34,35 69,60 67,78 52,32 78,71 97,89 52,09 70,56 96,09 59,24 93,11 97,68 47,50 89,70 32,81 94,70 87,83 65,87 37,97 54,64
29,50 87,72 62,14 91,83 35,07 69,89 33,10 114,43 64,34 82,51 73,15 81,07 50,07 69,09 31,63 65,16 112,21 31,02 116,65 72,94 55,12 87,37 66,99 41,68 80,51 86,24 95,23 59,85 111,58 72,31 91,60 102,45 89,29 116,83 35,93 70,75 106,65 48,38 73,21 88,25 112,77 76,51 118,16 67,69 107,17 37,39 44,17 51,70 56,21 92,13
108,10 98,09 108,12 95,56 110,37 88,00 103,20 95,11 108,43 97,78 83,83 98,11 103,89 101,77 91,36 112,99 91,20 93,81 89,30 95,31 111,28 110,96 103,17 108,92 85,47 105,51 84,02 105,01 100,41 94,95 97,63 91,55 95,18 104,50 108,62 109,57 83,16 108,75 110,55 95,52 84,71 103,80 101,46 110,26 96,33 89,81 109,47 107,31 112,36 99,50
97,79 97,13 85,50 96,47 84,94 97,60 102,45 107,38 86,79 88,78 103,03 107,84 91,27 102,80 100,73 108,82 105,79 89,83 107,86 91,11 87,92 96,32 108,88 107,78 93,36 94,80 92,57 96,44 112,65 108,83 108,65 109,31 86,66 108,85 90,99 99,24 97,08 101,75 100,50 83,41 96,87 96,23 93,03 98,18 93,76 108,16 83,47 91,50 84,13 89,17
110,64 96,31 104,77 102,38 91,76 112,86 99,99 102,16 93,58 89,44 93,30 92,58 89,17 111,45 112,18 85,01 97,83 112,04 96,59 95,28 113,32 90,22 110,93 108,07 98,87 89,44 99,07 86,57 94,83 88,51 109,17 96,08 105,95 95,67 85,59 105,73 89,91 98,00 86,06 104,23 94,85 112,10 113,61 98,39 106,37 104,59 97,88 97,82 111,14 99,94
104,81 90,00 106,72 98,62 103,38 105,95 106,72 94,26 93,22 87,32 111,59 85,98 83,91 108,87 95,43 104,06 90,32 97,48 87,88 103,51 84,16 111,85 85,57 102,13 90,44 98,86 107,53 104,17 103,31 111,91 106,69 87,27 101,74 101,50 88,93 84,49 96,68 89,81 100,25 108,46 88,76 99,99 108,88 88,77 99,33 105,88 109,82 102,38 111,70 88,37
343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392
105,44 110,46 107,94 111,25 92,55 96,22 42,80 95,20 77,84 78,13 116,65 68,22 56,02 88,06 46,11 106,27 99,26 93,76 94,17 56,54 80,31 105,36 70,29 64,22 55,30 90,06 90,94 60,21 117,70 41,87 52,86 32,60 89,49 65,89 34,99 70,38 75,01 77,67 99,09 95,03 82,45 95,90 66,81 78,86 109,51 96,04 29,45 52,72 51,26 89,98
113,34 85,66 110,00 51,23 76,41 97,82 96,75 54,66 46,18 113,74 108,22 29,67 64,38 93,97 100,82 74,99 71,06 109,37 91,04 56,04 113,23 83,87 115,47 53,70 69,95 79,24 90,41 77,72 59,95 53,52 55,28 68,71 110,78 60,69 106,91 115,16 108,90 101,65 84,14 92,92 38,02 75,84 51,26 56,06 75,17 32,74 97,78 96,65 100,89 115,19
33,17 35,50 70,64 104,66 62,21 92,99 52,24 106,95 81,77 65,92 38,55 55,74 117,05 50,43 90,59 70,78 101,70 46,55 32,26 48,56 88,01 59,83 38,74 68,41 116,45 54,33 80,37 77,50 108,33 75,41 64,41 116,77 96,92 45,56 33,32 110,32 78,84 52,10 48,46 86,24 84,83 70,23 57,13 48,44 43,69 88,72 96,81 43,25 31,56 35,18
30,31 83,64 34,88 63,09 30,96 61,71 112,23 63,92 35,30 69,51 106,28 114,89 104,07 81,68 65,52 34,29 74,53 50,62 43,89 69,11 99,34 89,91 102,39 70,94 100,33 85,01 97,19 53,74 61,72 101,99 56,70 90,50 109,07 47,40 118,76 97,19 105,34 94,52 82,04 35,45 83,64 109,08 109,06 76,31 52,49 52,44 36,47 101,08 87,18 30,75
96,34 84,48 100,18 98,91 88,00 85,05 112,88 110,78 112,49 111,94 90,45 84,52 95,08 103,53 92,53 105,57 112,92 85,71 102,19 89,42 111,02 85,45 90,17 107,02 100,04 93,51 95,62 91,00 91,53 85,50 98,98 100,65 90,52 84,06 107,20 86,78 90,52 112,23 94,59 91,23 90,65 111,29 88,24 87,36 103,07 95,12 86,72 110,98 96,44 88,73
83,98 98,35 106,15 92,24 111,69 108,47 102,43 94,97 88,66 112,07 87,67 97,50 86,40 89,03 107,13 104,45 91,83 94,46 93,11 95,18 104,26 90,66 109,39 98,58 85,29 92,37 87,14 83,37 97,03 89,40 110,28 95,82 112,42 88,80 84,93 101,09 89,79 93,90 95,84 101,74 109,65 111,52 107,34 91,14 107,01 112,31 109,03 90,45 107,42 103,47
100,15 84,91 88,47 91,61 102,09 98,31 88,91 88,99 90,32 86,10 97,01 111,69 111,14 92,32 98,64 86,94 100,74 104,21 109,06 112,51 94,88 107,67 110,37 97,53 105,44 102,58 85,41 98,53 90,33 114,00 89,93 87,97 113,55 106,40 90,95 88,15 94,58 106,58 90,25 108,54 104,75 101,04 84,51 110,13 91,16 113,51 85,97 93,43 106,81 104,32
109,18 109,37 93,06 92,18 90,93 98,45 95,51 102,07 85,19 93,76 98,88 109,89 86,19 99,67 111,87 106,91 83,50 98,04 107,21 100,82 97,02 96,66 105,33 95,41 86,62 90,79 91,45 107,04 89,02 88,19 96,70 87,41 84,64 94,94 110,65 88,89 99,56 89,51 93,26 85,81 104,16 98,38 99,04 100,60 102,50 105,83 111,43 91,82 107,08 98,14
393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442
105,51 41,32 103,31 76,69 63,69 66,91 113,12 51,82 37,14 43,87 111,56 117,56 48,43 60,08 94,82 64,53 65,77 42,10 55,43 34,11 52,88 70,21 35,86 35,90 44,46 82,12 35,81 32,30 74,59 36,41 113,46 113,57 53,89 72,18 114,16 74,68 34,06 82,05 36,78 70,37 58,46 108,28 47,29 68,61 92,86 80,71 57,66 42,81 111,90 111,20
40,58 103,54 117,41 61,78 84,90 39,20 51,36 65,27 97,60 70,64 71,29 44,70 107,22 64,10 42,15 105,72 44,52 100,53 45,98 105,85 110,52 69,62 33,83 73,41 62,48 109,19 67,32 93,84 65,14 89,77 30,26 86,46 33,39 31,73 79,88 36,78 96,62 95,95 104,55 86,04 94,98 94,66 51,66 55,85 100,95 40,05 56,08 104,64 108,98 80,66
79,88 61,65 78,96 98,73 38,44 54,42 90,27 100,57 114,74 70,62 93,74 65,36 87,19 80,75 89,01 34,66 63,47 90,73 71,81 90,36 60,48 59,72 65,25 32,48 29,60 56,29 37,46 70,82 73,00 118,36 63,03 34,10 62,62 31,22 82,07 37,13 34,10 52,23 65,68 114,40 42,09 95,07 92,78 79,93 29,86 51,47 102,32 116,33 66,24 60,79
45,07 114,03 79,43 43,42 70,74 41,32 86,36 63,66 101,61 83,84 77,89 41,50 74,32 38,38 77,65 107,42 31,33 52,53 91,86 75,46 109,11 105,52 60,94 101,73 36,15 53,04 80,17 47,29 113,45 76,24 58,77 108,82 107,72 54,31 37,85 115,95 37,15 113,43 32,62 42,56 75,38 55,38 62,83 105,85 39,97 82,24 58,28 40,12 49,03 87,63
86,76 89,38 110,56 90,89 102,03 101,70 90,84 90,86 83,29 96,02 94,70 94,74 106,00 102,54 102,00 106,93 94,55 86,50 96,58 94,64 112,26 104,64 96,71 108,28 97,05 111,16 112,18 93,41 94,47 100,91 110,70 91,65 90,70 92,71 104,74 95,44 110,81 83,11 112,75 91,08 87,38 84,57 83,62 111,22 88,72 86,97 112,46 105,29 112,07 94,75
89,72 98,15 102,22 87,37 106,12 111,65 95,48 98,28 92,91 83,64 86,04 112,04 111,32 89,20 98,90 84,02 87,13 99,15 86,80 108,59 88,92 93,69 85,32 109,41 98,98 86,92 95,04 93,16 105,48 88,34 83,95 108,90 84,92 97,29 111,37 87,53 84,41 96,21 103,29 111,63 96,79 103,55 106,15 101,11 106,38 95,64 100,51 100,25 85,46 102,16
102,05 93,77 92,46 90,47 104,90 93,97 99,46 93,43 94,10 112,48 103,63 88,05 113,66 86,39 91,31 109,42 101,49 111,63 97,82 106,57 92,42 97,36 109,00 113,60 103,91 86,65 109,20 103,98 111,26 108,62 94,84 90,37 86,88 95,03 100,67 113,51 94,36 89,25 89,78 89,97 104,50 105,34 90,18 100,37 108,95 105,17 84,14 90,44 89,09 92,98
109,51 95,48 94,38 88,75 88,32 102,00 109,42 95,33 86,81 106,06 83,81 90,46 108,38 109,14 88,43 102,31 103,97 108,23 103,05 111,21 106,85 93,35 107,78 109,57 111,00 101,03 90,50 84,12 89,98 100,02 96,08 97,78 101,34 90,94 98,21 100,11 106,61 89,19 94,92 100,10 95,34 86,23 104,65 83,20 108,76 111,73 95,95 103,74 91,62 103,52
443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492
60,91 112,02 112,93 32,02 46,01 46,74 38,73 34,49 79,68 59,99 67,89 69,11 80,80 59,42 109,79 38,20 104,28 28,43 75,87 58,28 49,43 64,71 86,84 82,60 81,67 49,25 77,94 96,47 68,83 67,14 79,63 38,41 107,01 107,84 93,64 114,70 58,07 95,01 71,75 69,74 46,76 102,23 77,87 86,91 74,54 116,70 66,20 91,61 56,99 102,64
101,76 105,49 64,11 68,81 81,77 118,85 73,63 32,03 77,98 47,38 38,17 113,61 97,03 71,67 99,10 35,86 117,98 50,97 41,24 52,14 49,48 53,03 114,27 79,68 33,81 38,90 98,19 79,63 103,23 95,37 86,77 31,48 91,14 107,52 64,07 109,30 93,07 43,62 110,90 88,49 71,79 85,98 118,17 36,79 66,60 42,90 74,90 74,46 69,79 59,81
48,82 109,94 74,17 50,00 46,23 66,80 32,60 47,30 54,99 64,59 34,10 48,73 102,62 57,74 40,94 102,17 58,17 45,33 46,80 79,54 78,57 95,77 68,45 67,22 39,68 32,42 105,75 94,12 83,16 40,89 105,49 106,26 66,25 70,88 66,88 38,48 67,85 32,49 61,45 55,36 45,10 85,45 109,39 57,58 68,05 94,03 90,67 90,07 92,48 60,19
88,49 85,23 45,32 114,43 49,78 51,31 56,97 93,95 71,50 68,04 107,44 46,13 51,72 85,81 30,82 46,01 116,51 110,03 96,07 46,05 108,42 85,33 93,28 113,35 79,17 87,74 82,61 97,22 55,50 117,46 91,14 65,41 82,25 59,79 35,69 47,41 55,39 42,45 102,86 66,97 99,28 51,85 44,46 66,37 96,68 95,25 36,74 61,74 30,21 96,47
95,15 100,74 101,52 90,18 87,25 95,62 88,51 106,52 102,70 101,62 105,08 98,99 101,45 96,45 85,74 86,91 93,55 103,99 107,32 111,51 94,77 85,94 91,51 106,48 103,22 102,28 96,77 112,32 101,58 86,17 85,80 85,41 86,52 90,63 108,78 104,32 105,10 90,98 83,58 103,10 103,98 105,86 85,85 96,59 99,35 94,24 88,77 96,58 103,66 107,78
107,59 97,14 107,59 108,00 101,12 97,44 98,57 110,23 90,29 86,91 92,38 97,55 111,51 111,55 108,18 86,23 102,80 107,84 92,54 104,18 91,60 98,67 110,97 86,03 100,34 112,79 92,72 108,44 85,92 88,32 102,30 87,42 112,23 106,71 105,07 110,72 100,94 101,71 109,83 102,99 94,90 111,50 88,34 110,94 111,36 105,41 93,39 98,98 96,09 103,68
102,96 85,98 111,58 93,50 84,41 108,14 86,83 112,87 87,88 88,89 93,02 89,59 112,82 98,20 88,75 85,09 98,21 94,71 97,75 96,63 110,06 95,42 88,58 87,19 89,34 94,32 111,41 103,58 107,47 84,09 86,11 94,26 94,71 103,86 98,25 96,36 97,52 84,26 103,77 97,38 105,31 84,81 96,74 88,08 100,78 112,96 105,34 100,76 105,11 86,43
96,98 82,78 93,55 87,66 89,91 103,32 93,50 98,14 109,29 82,99 90,09 83,78 88,88 101,88 108,49 107,79 88,08 100,49 91,38 107,22 95,38 110,97 83,67 92,95 93,59 106,04 100,71 88,39 109,25 98,51 108,32 105,77 83,91 85,29 108,06 107,55 95,79 98,92 86,09 103,54 97,72 96,29 102,83 87,50 107,23 99,05 106,33 91,14 99,17 109,14
493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542
113,76 106,95 91,54 109,47 44,75 116,70 61,70 112,82 100,88 105,02 60,97 56,19 87,27 52,15 60,14 90,49 110,82 98,44 107,87 75,02 114,18 93,77 77,28 57,73 51,89 100,43 40,81 52,98 68,69 54,44 51,76 38,05 33,49 98,55 110,50 112,93 60,84 33,18 49,55 85,38 112,55 107,47 57,26 59,11 76,80 117,20 80,08 96,20 33,68 91,05
64,04 54,98 111,80 46,71 32,94 94,92 80,24 109,84 41,05 73,53 34,08 37,79 112,99 100,82 79,69 44,12 80,85 37,43 75,64 34,19 116,37 97,48 107,23 58,26 29,66 57,40 55,81 96,31 113,49 34,93 29,37 42,34 98,61 60,73 42,46 58,50 118,30 78,69 58,62 111,70 88,54 101,90 62,77 102,76 37,78 72,02 81,13 45,60 49,42 92,26
117,55 101,24 80,56 118,99 93,24 97,15 107,76 92,75 106,41 61,02 112,89 68,36 42,07 101,76 44,97 99,87 37,10 62,63 55,39 108,34 64,33 106,20 54,58 43,91 115,93 47,29 40,33 52,10 39,44 37,51 96,23 103,74 69,89 34,77 64,07 70,47 76,02 85,61 31,25 35,57 110,89 100,24 97,49 96,77 104,27 75,85 55,37 81,17 73,12 95,40
113,14 54,88 116,24 68,20 69,32 65,44 36,01 90,42 109,56 50,13 103,98 32,39 114,96 58,56 32,41 67,60 39,95 31,64 118,36 108,93 30,22 110,43 53,30 43,08 33,94 105,46 116,61 86,97 38,89 112,01 111,88 43,04 109,81 57,14 116,04 66,53 90,31 38,61 34,61 39,65 100,24 74,10 80,97 85,50 56,07 77,10 68,87 30,15 34,87 77,47
90,15 102,91 98,32 98,35 98,01 92,04 109,02 98,09 84,23 92,26 84,67 85,49 95,47 87,98 102,67 92,36 105,92 108,52 93,85 93,77 93,10 85,53 84,33 93,17 91,35 99,44 93,56 104,58 84,15 98,04 88,53 103,84 104,95 91,95 88,98 105,19 109,56 110,96 100,55 96,08 86,97 104,31 87,87 83,20 89,27 96,18 93,31 100,80 95,23 107,09
88,41 91,53 96,27 89,39 85,13 100,27 91,19 111,76 93,66 89,65 92,85 105,39 92,50 93,18 95,64 91,79 87,96 107,98 101,42 84,92 86,51 108,83 106,48 86,18 96,76 101,78 108,02 93,33 102,88 89,94 110,03 111,45 108,78 86,32 94,96 86,93 100,31 98,82 83,92 100,83 94,17 104,66 83,49 110,13 101,48 92,75 89,13 112,09 99,39 112,01
111,24 105,93 111,97 109,40 95,40 112,00 84,65 95,78 86,54 109,61 100,57 93,69 93,47 103,11 113,25 100,55 104,01 97,47 101,09 110,44 110,76 104,14 109,94 112,07 112,77 104,17 91,46 110,35 111,03 102,44 93,75 96,14 109,38 92,01 89,91 90,00 103,40 106,79 110,18 108,37 99,57 88,21 101,38 92,24 87,10 100,57 98,45 87,12 94,55 92,48
99,07 84,34 104,27 99,82 87,31 89,82 97,01 111,17 107,49 84,22 103,60 95,65 96,78 104,12 95,40 91,98 86,58 111,45 101,15 98,40 89,36 91,55 111,76 97,80 92,16 91,10 84,71 94,96 101,42 107,97 98,46 92,78 111,26 101,95 83,54 97,69 110,69 111,36 90,88 101,72 89,93 105,30 84,22 109,45 86,01 106,23 90,57 108,78 82,55 99,73
543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592
72,77 101,76 113,87 34,30 95,09 94,90 32,91 73,71 106,64 93,80 40,67 29,11 73,74 59,27 35,86 38,57 103,59 107,17 94,13 74,45 44,06 60,45 33,10 41,67 80,05 56,42 113,90 110,83 96,71 50,22 74,80 47,89 115,17 32,46 29,33 115,75 39,27 59,44 61,21 96,71 46,31 45,76 96,25 69,82 76,68 30,35 95,39 102,45 71,28 62,31
107,60 38,54 58,82 65,99 51,06 117,32 80,36 53,46 79,25 116,00 100,59 85,37 116,31 110,86 39,95 70,91 111,65 102,06 68,27 80,56 62,83 75,04 100,17 69,23 106,72 32,98 69,71 71,29 116,74 80,02 110,55 107,30 82,08 65,92 77,21 31,30 89,41 85,96 35,59 80,81 106,68 118,40 111,48 69,21 45,53 36,69 91,55 87,82 115,21 68,72
75,40 76,90 71,74 97,10 92,65 35,87 62,52 83,86 68,59 116,96 41,29 112,12 78,60 44,16 68,46 38,90 74,68 33,51 62,90 97,03 94,65 35,19 46,65 72,78 97,72 95,91 41,78 52,23 71,40 60,87 80,60 89,24 78,17 61,69 71,10 73,54 103,95 49,50 48,74 112,90 39,39 64,72 94,19 97,73 66,82 32,96 78,90 70,13 117,82 86,03
116,03 38,01 75,31 98,66 74,03 110,49 98,28 48,67 61,06 71,92 44,82 103,91 74,32 37,81 55,96 78,19 34,65 90,77 41,50 81,25 46,97 118,27 43,04 58,16 87,34 100,00 64,62 55,16 46,19 74,20 48,96 61,54 72,71 67,13 82,45 77,87 72,22 94,20 103,56 96,46 118,94 43,95 45,55 100,45 60,52 80,94 118,38 32,23 83,46 99,46
84,41 112,29 100,35 99,78 101,76 112,51 104,42 111,22 107,38 104,84 110,08 105,91 98,57 108,57 112,13 99,37 104,35 83,70 112,42 104,79 92,24 100,44 91,94 97,92 94,36 112,04 98,99 87,97 102,09 106,02 98,00 106,50 89,62 106,36 94,24 90,41 102,92 98,69 98,31 101,58 86,93 88,63 87,51 108,73 88,06 84,89 102,70 91,31 96,07 89,66
94,80 107,50 102,70 88,55 97,53 92,73 91,39 99,75 92,30 96,37 108,99 104,89 102,38 104,47 92,45 91,62 111,58 96,57 94,23 83,31 91,37 102,08 87,59 96,82 99,25 106,25 111,60 87,38 85,91 108,26 112,72 90,04 90,70 106,70 111,00 94,07 91,13 85,48 93,64 104,05 110,91 110,07 102,02 103,35 95,09 97,46 94,76 92,57 87,59 107,46
103,93 110,05 101,68 99,86 105,10 98,75 89,25 111,76 101,21 100,47 86,06 110,10 94,62 99,18 92,62 97,33 110,35 105,60 105,11 102,91 109,42 99,03 102,80 95,23 100,36 99,12 113,82 95,59 85,77 104,96 88,35 101,10 103,14 109,84 99,31 85,49 101,65 102,68 99,85 98,56 91,29 103,93 86,33 93,07 113,14 100,93 96,67 106,50 109,43 95,48
85,58 104,80 101,62 86,38 104,05 102,75 104,13 103,60 102,06 102,76 92,20 105,03 103,29 93,38 106,20 92,73 91,93 100,68 87,99 101,48 84,53 103,11 91,07 96,16 107,26 85,95 107,82 92,92 105,74 84,35 88,78 98,54 102,96 95,83 97,04 94,68 94,21 102,83 96,67 102,66 106,23 97,56 84,41 107,49 99,69 108,43 109,30 89,29 111,19 94,37
593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642
113,38 37,91 112,69 42,52 95,67 77,08 107,78 58,87 104,20 35,27 55,99 96,84 30,07 83,14 114,90 114,09 102,45 96,82 45,29 102,07 36,93 33,86 39,95 70,97 31,96 81,28 45,12 28,96 84,27 106,86 33,02 78,85 92,46 51,43 29,52 88,56 62,02 43,37 110,89 92,08 82,65 36,00 54,67 108,70 68,80 45,93 65,96 28,08 61,21 41,66
97,53 91,65 91,74 56,05 36,51 48,38 44,76 43,23 78,48 63,12 85,19 95,00 40,34 83,13 97,81 29,86 42,85 33,33 118,34 92,18 45,41 40,67 57,70 75,93 64,42 53,48 103,32 37,57 100,69 76,36 41,18 54,27 74,35 49,32 93,83 50,21 98,20 113,22 34,06 90,42 102,67 95,35 77,52 31,83 96,48 77,31 101,34 32,00 40,86 43,96
55,80 55,66 48,20 36,19 78,76 30,73 72,45 96,17 47,95 75,35 66,64 53,66 35,53 117,93 73,10 75,40 37,90 83,32 37,74 73,52 38,57 45,66 101,30 72,10 41,28 112,03 56,29 84,65 76,64 82,69 48,15 91,44 51,62 86,58 104,43 36,46 71,00 50,84 70,62 106,77 33,88 99,21 44,49 37,81 54,95 100,46 42,81 56,96 107,74 66,19
84,20 79,21 101,91 75,18 109,09 58,64 69,04 47,28 101,41 60,94 110,98 98,07 107,59 107,10 45,50 82,36 98,29 105,79 62,95 42,27 32,62 78,26 46,94 73,96 44,76 67,19 38,85 78,64 66,49 58,22 32,41 118,39 73,97 106,16 46,41 110,85 53,08 110,29 67,51 108,94 37,91 112,42 35,40 52,92 95,21 62,88 84,93 50,62 85,16 98,22
87,11 98,14 86,57 94,60 96,48 96,35 96,18 110,57 107,17 93,71 105,06 88,33 88,36 105,95 101,23 90,45 85,96 96,99 95,05 98,58 86,25 91,71 101,69 95,46 106,72 97,28 104,51 109,09 110,19 111,76 107,43 112,23 90,01 90,50 105,93 88,75 102,77 100,51 106,47 104,50 110,30 88,91 104,95 104,58 84,35 84,21 86,76 106,70 91,04 97,59
107,77 109,56 109,71 111,81 98,67 83,45 88,81 93,06 107,17 94,24 83,43 91,84 98,92 104,52 107,51 93,76 107,27 90,15 83,34 88,96 84,86 108,76 84,03 91,56 95,27 105,97 89,58 95,38 97,06 84,95 83,44 83,01 92,27 101,91 100,20 84,48 112,42 88,17 100,51 106,50 102,15 86,54 105,38 99,24 108,85 102,96 92,25 111,62 108,82 96,78
111,53 105,22 93,05 100,35 89,70 85,19 92,13 105,87 105,64 84,31 108,80 110,38 106,12 86,91 111,12 109,11 98,00 103,72 101,42 102,04 107,99 110,27 86,36 103,29 112,88 108,20 96,08 104,13 103,33 98,18 113,63 97,08 109,95 106,29 98,99 92,28 84,97 99,83 111,61 92,40 98,78 112,02 93,64 104,37 93,50 85,25 112,44 85,16 100,79 96,14
100,64 101,82 107,42 98,66 85,53 95,12 83,42 97,99 89,99 95,28 84,96 89,84 87,00 104,10 110,40 107,29 89,33 83,18 99,70 103,67 108,21 92,04 89,77 93,50 105,26 82,99 104,14 90,66 93,80 102,84 101,44 103,73 102,15 107,71 93,34 93,55 89,78 94,88 100,22 99,38 99,27 91,69 93,87 98,12 83,38 106,80 83,89 82,44 97,63 93,09
643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692
90,04 113,53 53,04 109,18 113,64 31,74 77,79 51,42 110,57 77,04 78,55 116,22 56,74 41,42 29,09 28,71 94,05 62,57 90,57 92,26 96,72 96,81 95,46 62,62 90,59 42,80 87,11 36,14 32,73 46,55 108,49 42,86 85,33 117,50 64,69 92,35 104,29 52,85 99,17 70,86 60,52 92,42 111,20 32,63 113,24 74,97 60,17 60,28 77,90 44,42
71,20 48,56 45,06 92,63 64,88 74,73 118,11 78,47 68,94 94,99 58,41 80,24 55,93 65,43 43,93 37,20 110,72 114,62 69,18 43,48 101,40 68,88 116,80 56,70 100,58 79,19 40,17 86,07 85,97 52,25 87,28 71,46 99,30 103,28 43,93 29,26 98,25 45,93 116,69 53,49 85,70 85,58 61,90 35,73 36,88 117,48 111,91 103,53 112,98 36,67
88,91 52,71 47,46 80,30 33,77 46,91 99,83 86,34 62,48 53,75 76,83 55,89 85,62 57,65 90,29 116,72 47,67 38,14 84,07 30,71 111,79 97,52 96,89 89,32 43,97 82,39 71,66 88,84 84,37 36,58 42,92 84,76 100,48 92,11 94,50 94,29 71,55 104,73 34,78 41,74 114,99 73,72 91,58 51,54 29,27 76,25 118,43 79,00 44,01 93,27
35,33 98,76 105,57 112,02 114,26 47,90 83,39 40,12 72,57 57,09 92,95 67,98 32,02 49,34 105,28 89,27 96,66 107,76 42,17 80,51 71,24 116,48 29,47 53,23 101,11 40,05 104,68 75,12 110,79 93,83 59,58 44,67 82,94 43,95 75,36 116,32 29,81 84,47 117,95 116,57 96,00 77,74 42,62 67,07 42,75 106,36 69,73 44,89 34,30 109,07
95,93 104,85 99,74 101,95 110,39 91,46 96,44 107,51 90,06 98,29 91,69 95,40 109,96 102,89 112,89 89,75 83,14 86,00 100,32 93,98 92,78 102,68 84,60 105,67 110,26 96,22 99,18 92,74 97,31 112,59 86,74 111,03 87,54 96,33 94,83 110,94 103,52 112,50 83,75 93,27 89,97 111,74 96,01 89,82 108,33 98,27 92,77 109,58 108,63 98,52
94,37 112,21 89,27 112,79 95,26 106,99 91,54 92,86 92,47 90,94 104,39 85,72 99,08 88,72 97,55 92,77 86,00 85,27 87,90 92,48 94,75 107,58 85,66 103,76 111,10 91,38 100,50 84,01 92,26 102,13 85,28 92,85 110,02 110,28 96,03 103,42 87,78 99,98 99,49 102,90 94,42 106,37 90,95 89,57 111,09 112,91 90,19 94,11 95,98 102,05
102,35 107,97 101,52 89,44 101,84 90,05 85,07 105,19 104,43 106,22 91,36 112,99 111,04 93,57 111,35 92,14 89,15 107,13 113,97 96,80 97,26 108,49 93,01 90,88 106,87 98,11 84,19 110,26 95,80 85,55 89,61 99,22 100,06 109,89 93,57 90,72 113,96 106,99 100,48 104,91 108,44 108,04 110,17 87,00 91,51 106,18 111,87 102,85 105,58 111,24
109,69 85,43 108,48 103,97 103,40 83,15 88,29 89,39 85,01 92,80 100,74 101,01 98,59 97,36 104,97 93,98 107,50 96,91 86,90 106,89 86,58 93,64 91,66 99,75 101,62 91,50 89,57 96,17 82,11 108,28 110,37 88,75 82,08 90,71 106,33 89,21 87,48 101,03 92,02 102,88 82,77 103,15 101,88 103,29 82,30 108,04 82,54 109,77 93,64 100,23
693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742
69,88 47,01 105,81 113,36 103,25 59,88 51,35 44,37 96,74 111,44 53,37 77,17 43,76 116,68 112,00 54,89 117,05 63,48 56,71 78,12 50,69 99,70 107,63 91,01 116,99 74,81 115,74 40,10 57,04 103,11 102,27 67,84 114,46 108,21 114,70 33,05 44,81 45,60 80,85 53,54 32,97 91,94 71,48 110,25 110,29 42,27 107,45 54,98 50,95 94,43
116,03 77,87 80,31 66,89 117,71 37,94 92,77 85,95 87,89 37,89 49,10 46,28 114,53 60,87 66,65 118,99 83,60 75,60 43,76 30,06 73,19 96,37 99,04 99,14 53,88 108,04 108,20 68,88 103,26 112,04 115,55 71,34 93,11 59,10 52,04 99,88 107,03 64,05 60,83 73,90 96,20 82,54 97,95 38,41 43,64 97,91 104,97 38,94 93,41 87,68
45,56 82,66 51,30 112,92 103,93 98,84 49,34 85,16 67,90 34,22 49,16 38,46 116,48 56,03 118,83 79,06 34,86 79,39 64,83 71,40 87,33 93,08 73,69 30,65 101,40 80,28 114,50 32,02 69,14 90,77 118,89 112,99 62,71 99,37 99,24 98,60 66,66 80,90 68,03 115,28 70,65 49,59 52,28 39,55 102,53 113,26 41,71 65,76 65,73 92,79
57,32 92,44 40,81 33,03 34,04 41,96 102,15 36,33 32,44 75,97 75,09 101,77 74,62 107,27 86,72 65,68 34,91 52,42 55,10 83,34 79,39 29,10 83,90 77,30 87,84 105,62 99,92 78,22 75,93 113,51 114,78 64,34 86,46 110,91 109,67 32,94 104,18 65,12 37,70 44,61 36,57 84,80 107,78 110,14 60,04 110,36 43,09 64,78 29,66 71,14
86,42 92,10 92,50 98,01 89,81 104,74 112,71 93,13 106,21 100,15 92,64 97,04 92,66 101,93 102,38 102,40 89,83 87,81 103,86 95,96 97,20 101,03 101,76 91,62 95,76 107,63 84,37 88,49 110,26 106,67 109,60 94,83 87,31 98,14 100,56 96,91 106,62 102,12 83,46 95,57 93,99 98,88 100,04 93,86 101,65 109,41 85,75 84,88 107,79 109,31
105,41 92,92 95,87 89,79 111,08 96,82 101,75 105,68 98,95 100,99 107,34 93,35 84,78 88,96 94,44 99,58 108,61 87,99 86,85 112,39 104,41 101,86 102,15 92,50 96,71 101,48 94,66 90,40 85,96 108,62 103,26 94,51 99,87 112,99 101,75 100,66 112,20 91,40 104,48 104,91 97,67 98,69 108,06 88,18 94,75 110,15 112,35 103,45 83,11 92,78
88,32 101,18 103,76 87,07 97,89 104,91 87,14 105,75 107,48 94,38 112,85 102,79 108,02 107,13 94,90 91,98 100,45 106,50 109,65 95,11 85,03 100,37 108,84 86,78 88,85 86,25 90,54 92,31 105,79 94,64 112,99 105,54 103,71 94,66 95,22 110,13 87,24 93,92 92,25 113,98 112,01 113,51 108,01 106,01 89,44 108,07 92,74 88,07 93,03 106,10
92,88 109,33 93,12 91,79 109,46 106,00 94,02 90,19 101,05 85,15 93,00 103,52 95,20 88,65 98,88 101,71 94,46 97,12 107,38 105,52 99,93 93,55 96,89 100,99 90,73 85,33 97,46 107,36 87,41 108,18 109,66 89,03 106,11 99,96 97,15 92,28 90,59 99,44 100,16 83,55 99,21 93,82 104,32 87,95 100,15 110,43 96,58 99,91 102,35 103,37
743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792
94,49 32,27 111,46 84,17 77,54 74,48 96,29 33,85 78,50 60,48 76,64 54,66 77,79 43,73 74,21 58,63 37,85 100,55 111,43 28,02 104,75 90,37 97,68 74,59 62,44 65,76 81,26 108,09 45,39 93,14 53,90 86,34 45,89 61,91 71,51 111,13 71,34 85,79 113,92 107,87 52,59 59,07 100,59 31,84 114,71 60,54 91,87 94,95 36,36 43,89
92,68 108,24 37,01 44,85 101,39 76,00 97,02 55,76 115,93 80,77 118,93 113,62 53,87 32,90 113,45 58,94 45,82 46,07 57,35 68,75 99,26 83,78 38,76 42,82 90,34 117,78 104,88 90,78 95,26 116,22 116,27 111,35 34,59 102,94 103,22 68,61 73,82 118,74 58,16 75,51 94,21 48,59 71,55 38,31 41,41 58,06 62,22 99,51 59,25 93,51
111,65 107,57 86,97 106,29 113,14 81,43 44,40 56,35 89,33 95,09 82,23 78,25 55,51 70,71 51,81 72,72 57,17 62,82 98,65 115,29 67,83 84,68 114,51 36,74 65,06 36,08 118,62 46,69 37,62 53,12 75,14 32,12 88,87 39,00 32,49 80,02 62,45 88,76 83,87 56,79 67,72 56,20 93,41 94,70 116,68 93,16 63,83 98,28 100,49 30,08
118,63 65,98 101,91 100,60 74,43 40,81 97,33 67,38 43,59 71,85 79,76 79,86 97,67 99,74 100,62 39,43 50,03 83,45 44,64 29,96 118,30 86,92 110,09 82,83 88,02 85,41 45,62 81,24 35,55 49,13 40,05 101,88 57,70 80,74 93,98 47,52 81,51 106,26 40,64 114,66 35,95 36,78 118,71 51,62 68,37 63,62 66,88 104,94 74,75 83,21
90,16 84,85 92,90 107,44 104,08 96,46 108,21 92,90 85,50 90,10 112,65 98,92 103,04 107,05 99,78 91,24 100,12 92,21 111,67 100,67 89,89 87,55 88,42 100,88 96,16 107,33 99,79 93,60 102,12 88,26 85,78 109,93 106,22 109,72 109,10 111,41 110,58 109,08 98,96 105,26 96,94 101,39 112,96 104,79 106,72 99,82 98,31 100,43 83,22 105,96
88,32 109,70 87,94 97,18 94,83 103,59 90,94 87,03 105,71 103,47 103,80 101,85 107,41 102,64 98,81 94,61 87,93 104,16 106,81 99,90 99,01 106,54 85,33 110,05 89,66 104,30 96,86 86,37 103,04 109,72 91,86 103,58 96,07 96,32 89,98 90,93 87,77 110,66 83,08 106,50 98,61 95,85 86,09 88,29 107,36 96,73 111,82 101,70 93,20 86,00
98,41 95,93 112,94 88,99 90,36 84,45 108,37 104,95 84,20 105,62 112,35 98,95 96,82 108,36 86,25 102,26 99,88 98,54 102,05 100,88 109,77 107,81 96,36 91,92 85,19 85,12 93,11 88,13 111,45 99,13 87,79 110,97 106,77 111,93 110,14 94,96 103,82 106,19 100,68 100,06 101,90 92,90 89,48 112,40 106,37 102,17 100,43 107,07 110,82 85,64
90,67 96,11 93,84 83,93 108,42 104,02 93,34 100,71 90,41 89,50 109,65 92,35 88,92 105,70 82,67 104,28 94,66 89,90 103,26 95,92 90,25 84,18 94,92 83,15 111,88 100,28 84,24 95,65 91,13 109,46 83,34 109,21 102,46 99,71 84,71 111,02 111,34 88,68 99,18 109,30 107,64 103,12 83,47 87,19 88,61 99,59 92,99 108,94 91,86 97,96
793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842
55,61 37,88 74,28 52,26 84,10 41,27 72,86 105,70 77,58 76,61 104,53 113,77 41,39 66,62 81,69 91,59 95,00 78,67 71,47 78,53 56,78 47,86 78,08 31,84 28,04 63,51 102,57 30,77 87,33 93,12 104,65 86,94 63,55 75,50 54,20 47,09 30,01 53,07 56,09 46,06 60,59 83,56 53,19 97,18 115,80 28,15 93,44 89,67 39,28 69,01
114,20 118,46 110,38 55,02 108,94 69,58 95,47 73,76 33,33 108,51 73,51 101,41 109,38 50,27 32,48 64,07 68,01 79,52 48,76 90,09 52,09 67,20 115,74 57,91 94,03 70,02 62,20 30,43 64,58 80,53 41,01 117,40 78,38 41,73 110,97 77,29 86,79 51,40 36,61 70,15 35,32 78,00 30,38 92,24 118,13 40,64 46,15 114,24 38,02 87,58
65,09 92,92 72,07 92,54 115,44 36,23 57,48 92,80 104,84 65,25 41,40 31,35 98,41 86,54 90,38 115,11 105,22 63,34 30,39 93,65 91,19 95,54 83,49 105,89 40,97 69,96 37,77 113,00 34,35 42,07 68,17 106,58 71,97 62,09 38,36 99,44 40,75 78,95 88,49 96,28 80,74 65,71 112,00 30,09 53,38 53,66 50,64 48,53 58,16 34,64
75,86 39,68 101,11 103,67 97,33 39,43 82,56 33,18 116,03 108,61 69,96 55,35 83,59 38,71 90,92 96,37 31,74 42,21 103,40 116,89 107,58 106,12 51,95 31,86 103,65 116,48 106,00 97,56 79,77 36,22 29,12 118,84 80,74 65,85 65,84 60,57 33,99 94,87 37,18 37,66 79,24 108,02 113,28 74,03 117,59 87,06 57,75 109,75 82,02 77,51
99,86 112,34 89,39 95,95 109,26 85,68 94,91 106,14 88,51 111,83 98,09 111,17 99,13 110,62 112,46 85,28 89,77 104,61 111,27 88,59 99,76 109,53 101,88 96,59 98,45 90,49 91,93 96,45 110,82 107,07 97,79 111,44 88,82 97,61 88,19 88,90 92,36 91,76 88,41 99,66 103,31 86,55 88,58 83,27 92,27 103,13 97,10 86,77 106,45 93,81
109,58 108,22 95,77 87,67 111,45 93,62 90,37 89,67 95,83 97,35 110,16 97,85 98,52 112,34 87,20 92,82 112,78 101,93 105,21 96,33 111,50 92,38 83,85 97,56 101,95 91,52 104,75 85,72 85,99 104,89 106,79 98,76 86,54 102,48 105,29 110,22 94,14 94,40 107,12 108,67 84,43 105,20 110,80 85,22 103,91 108,77 98,55 99,17 112,58 90,47
96,32 85,92 109,10 98,49 94,95 100,23 111,45 100,21 98,99 107,28 108,52 89,50 99,17 96,21 85,69 93,74 102,90 103,24 109,38 85,10 113,45 85,79 108,39 91,09 110,56 101,89 85,77 108,90 87,55 95,69 104,28 97,67 103,82 102,01 108,32 94,11 112,68 92,38 98,41 104,13 111,33 94,50 87,42 104,86 86,73 87,31 113,36 96,72 84,38 88,99
91,34 83,26 108,61 91,75 82,76 84,14 88,61 99,42 100,81 86,20 90,41 96,48 85,40 101,99 96,28 93,71 101,97 111,52 99,47 88,44 86,44 87,46 97,45 93,75 93,45 91,50 102,31 102,92 107,58 86,49 110,32 90,74 93,36 96,23 100,07 107,14 99,73 83,82 89,03 110,67 82,91 99,02 110,87 82,36 90,06 102,99 91,74 96,83 86,43 84,17
843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892
78,54 76,80 102,31 71,81 53,96 68,58 39,67 96,25 31,10 86,21 98,34 75,50 45,06 59,58 57,62 113,04 84,20 73,82 32,81 94,97 91,95 108,02 59,42 30,06 88,43 85,03 84,25 48,22 29,05 82,76 114,90 71,66 28,42 113,93 42,95 46,22 60,68 73,83 68,51 41,77 30,29 110,90 116,92 64,38 115,29 99,00 46,97 29,80 70,24 28,93
83,58 29,75 73,18 62,58 114,61 60,78 40,42 70,82 70,98 64,17 89,91 95,77 104,90 37,49 104,01 56,07 115,88 78,49 57,80 75,83 29,12 54,38 99,35 75,76 91,14 99,13 85,48 110,70 104,23 111,60 36,89 95,94 57,28 102,25 108,97 73,67 70,56 44,56 84,37 118,50 63,33 100,70 49,17 68,48 116,85 88,09 108,92 96,11 62,34 34,51
39,75 100,77 45,00 103,34 48,99 59,58 83,87 73,69 97,15 87,47 114,29 102,72 37,12 47,49 77,02 85,50 67,11 43,82 114,64 75,93 44,68 107,29 33,69 34,37 41,52 99,17 75,59 91,83 113,08 90,07 101,34 100,20 61,84 42,49 92,68 96,12 85,72 55,26 66,53 89,40 34,83 59,02 50,46 117,84 66,34 108,87 115,45 40,83 108,67 112,21
77,18 69,98 56,40 66,88 53,88 70,38 89,42 88,76 50,97 109,29 50,38 106,82 46,29 51,31 38,97 54,08 86,59 39,38 100,90 93,54 106,63 96,10 40,27 64,90 36,13 75,62 40,25 53,16 57,63 100,02 43,12 98,30 83,38 95,08 56,29 116,34 51,36 68,61 85,76 91,92 109,35 49,98 70,66 114,39 57,95 34,17 38,70 63,74 106,45 73,74
94,83 95,32 90,37 87,92 102,69 90,51 91,14 94,17 103,41 90,60 107,21 91,92 98,07 95,23 90,49 111,75 84,74 90,87 110,79 91,82 95,09 101,63 83,18 108,33 104,94 85,39 89,75 112,19 99,49 107,18 111,94 102,17 105,50 96,53 109,51 90,89 86,42 88,73 100,66 109,32 89,09 97,32 94,57 99,32 105,07 92,42 112,12 109,49 95,45 109,52
90,00 107,32 84,06 86,59 93,69 109,97 87,03 108,34 84,32 108,33 96,42 106,84 96,13 104,84 100,22 95,25 109,38 96,05 101,41 87,86 103,50 108,99 83,87 101,47 104,22 86,66 105,92 83,78 89,97 109,91 93,29 83,14 90,64 86,76 100,80 104,65 87,97 102,95 100,81 107,58 98,23 86,36 86,77 98,94 93,69 108,65 99,25 98,38 97,71 104,38
107,26 92,55 90,46 112,37 98,44 96,72 109,27 107,35 111,94 100,22 87,75 111,08 90,05 87,58 91,57 94,10 91,71 94,65 85,79 92,65 97,33 95,66 93,40 97,72 101,08 107,08 108,93 109,04 94,21 94,16 93,37 87,91 86,33 97,13 111,13 92,14 103,91 106,80 95,26 106,80 101,41 84,18 107,28 92,33 109,30 93,84 97,14 93,09 90,46 101,98
111,16 85,32 100,18 109,97 89,87 102,82 101,47 96,04 103,26 105,52 92,11 110,57 94,86 106,84 88,21 101,80 110,78 102,85 105,28 94,77 110,04 85,41 93,86 92,87 89,46 85,90 101,56 106,87 88,55 109,75 93,08 104,04 88,88 107,86 105,64 89,45 107,01 99,31 82,54 87,55 97,94 99,77 85,76 86,40 110,82 101,23 92,67 94,86 91,06 88,50
893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942
70,10 108,72 48,41 88,95 95,39 97,51 108,83 94,67 117,58 89,09 28,58 114,88 41,20 29,39 87,70 60,21 73,22 55,93 63,19 88,57 50,46 84,58 74,29 37,37 49,34 101,88 77,92 110,90 41,02 79,03 63,28 53,05 30,56 28,67 75,81 53,80 109,11 103,56 113,38 60,86 36,65 42,33 107,48 87,58 55,40 98,37 83,65 44,97 43,58 77,96
76,26 108,73 86,11 88,07 57,34 35,47 50,42 47,75 37,04 93,14 104,34 53,03 57,41 99,55 101,06 45,28 56,48 116,12 69,06 34,12 75,37 44,63 98,19 104,47 92,00 30,33 85,92 89,18 29,58 116,68 100,97 49,92 51,02 92,32 63,96 106,94 49,00 31,67 84,90 56,91 115,54 51,02 59,17 47,55 74,36 50,43 113,38 45,09 106,28 55,42
78,56 88,46 98,66 77,80 55,43 65,40 65,28 29,97 29,77 115,90 105,31 35,37 100,87 42,18 81,47 62,75 83,46 105,50 44,88 51,58 111,19 78,99 112,48 70,68 69,16 103,11 93,02 60,24 72,29 89,90 74,36 48,82 34,66 101,94 67,50 100,12 76,38 118,67 97,09 68,31 65,47 94,42 86,26 31,58 38,62 30,88 48,34 34,55 116,73 112,27
76,31 81,79 42,18 62,76 102,66 77,56 113,87 40,81 109,80 104,95 67,36 98,36 49,81 49,55 116,69 96,17 52,95 64,58 97,43 103,27 54,19 80,65 66,50 49,23 80,58 105,06 84,55 57,17 77,23 79,35 114,83 99,13 111,37 56,99 72,54 32,46 116,57 88,24 100,12 114,73 80,99 116,40 104,69 79,70 85,22 33,53 106,48 57,45 65,44 95,04
105,32 96,22 103,20 91,78 100,27 100,88 100,50 111,85 96,35 105,17 111,12 106,81 88,84 110,99 99,69 92,15 105,37 100,89 102,27 102,20 91,77 105,48 97,45 107,47 87,03 84,08 103,73 100,62 99,64 84,84 91,29 90,89 112,45 86,22 110,06 89,16 104,57 109,18 94,30 93,72 83,46 107,52 102,22 97,04 106,96 93,00 89,80 110,99 99,85 98,03
105,87 110,91 97,47 97,77 91,07 89,40 87,29 95,12 87,65 83,50 86,16 95,88 111,08 86,92 97,27 96,86 85,45 107,64 92,22 109,65 91,75 103,29 97,44 98,24 108,39 89,83 103,22 90,60 96,02 111,41 93,58 92,00 101,35 92,70 97,77 106,95 106,38 89,38 97,11 95,51 100,87 85,08 84,63 88,86 88,22 88,30 90,46 91,69 96,67 103,12
112,33 107,44 107,65 97,91 89,07 104,08 97,55 101,92 94,93 87,79 85,12 92,62 108,46 104,51 101,66 101,90 104,78 109,25 102,58 96,14 109,36 88,79 102,23 96,90 100,40 106,28 94,79 111,82 85,17 102,32 112,93 93,51 98,77 96,66 104,32 92,78 99,99 112,69 112,50 113,60 85,79 112,19 111,30 101,89 109,04 90,45 112,09 89,92 85,66 93,86
82,49 84,61 88,65 83,63 111,51 107,67 92,37 89,43 96,96 110,45 103,45 109,96 82,02 84,17 100,71 82,96 92,69 98,01 107,98 98,46 102,52 94,45 111,97 108,99 94,97 93,34 85,75 105,55 99,13 100,19 98,89 82,27 96,90 91,66 106,23 99,51 93,48 104,20 82,46 111,03 86,10 104,64 92,68 107,59 110,00 94,73 93,37 108,80 96,15 110,07
943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992
53,44 103,43 32,01 115,44 35,36 113,77 87,72 112,74 38,96 42,55 108,43 60,13 30,92 44,26 111,86 62,36 102,40 79,65 101,73 52,87 73,22 72,94 68,01 91,90 92,44 104,21 65,00 33,86 34,71 63,14 102,71 73,22 115,59 112,26 41,29 110,39 89,29 31,68 111,42 89,02 46,29 77,49 28,17 113,83 58,71 79,11 58,14 32,79 92,27 114,86
72,41 58,88 34,04 55,29 70,62 42,11 53,07 93,25 93,20 81,07 102,16 102,02 94,44 29,85 102,93 102,33 83,89 66,55 48,38 115,30 107,91 37,89 47,13 42,87 88,93 62,65 91,23 83,33 82,30 42,63 31,45 71,53 101,83 74,38 87,17 32,33 50,29 46,90 34,92 102,59 54,14 46,89 79,16 85,38 54,09 115,91 49,33 53,43 68,57 37,39
90,52 51,95 61,71 81,33 32,69 71,40 104,36 73,04 85,79 45,80 85,23 104,82 72,92 110,18 57,44 91,03 43,18 85,89 49,78 34,93 89,69 77,42 41,62 32,85 105,03 111,19 78,13 86,45 90,43 71,45 100,40 30,60 118,45 50,67 94,60 102,86 94,25 40,94 90,41 89,87 107,06 58,29 75,51 72,03 77,18 47,79 56,61 41,27 89,94 67,69
46,24 96,03 76,39 37,04 108,08 63,42 54,83 98,96 106,39 55,22 102,60 60,26 73,51 82,50 51,22 104,35 62,91 77,33 50,94 107,45 82,51 102,56 104,62 51,03 92,36 82,01 42,52 49,60 108,49 77,02 100,59 100,67 50,03 33,38 55,44 93,92 75,84 85,30 99,80 66,88 51,56 99,89 85,82 47,85 90,93 69,75 65,84 87,01 93,14 57,82
93,61 99,10 107,89 94,11 108,40 89,24 92,33 107,82 97,72 90,74 112,08 95,95 104,21 111,90 102,89 102,53 106,31 94,40 110,73 104,75 108,35 88,40 104,11 103,89 112,11 98,82 100,77 84,26 88,60 94,60 111,48 97,96 105,70 96,99 111,43 110,74 83,50 109,63 109,03 89,60 98,04 110,53 93,82 111,02 91,13 89,31 93,10 107,37 109,24 102,03
86,81 106,06 100,27 84,31 112,88 86,35 101,44 108,49 98,22 111,98 88,46 98,25 101,49 103,32 85,53 110,81 96,28 94,77 85,02 97,79 100,86 108,31 86,82 103,82 101,80 88,23 104,70 111,67 91,53 96,11 100,73 89,47 111,30 110,34 84,07 94,48 105,16 95,32 100,19 87,78 107,87 104,29 93,70 85,73 93,71 97,57 99,38 89,84 102,39 93,82
108,75 90,25 86,96 106,35 109,25 109,55 89,01 91,16 113,13 101,18 89,51 108,65 87,85 108,44 108,03 103,30 89,13 107,31 101,69 86,96 100,22 85,61 89,66 92,95 108,02 111,91 86,13 103,31 112,56 88,25 88,31 100,81 102,55 94,04 91,95 101,30 85,62 102,98 97,20 98,45 100,86 102,78 87,74 90,07 98,47 95,02 100,84 108,24 104,25 84,63
101,22 87,20 94,87 110,64 111,58 97,12 86,58 83,46 86,39 110,82 83,74 104,83 105,84 86,03 99,96 103,88 97,92 93,92 109,55 88,47 104,20 99,34 96,30 99,79 91,43 101,11 88,13 82,89 96,34 93,56 103,91 83,04 108,64 100,22 87,13 98,60 86,47 84,86 86,40 92,49 89,34 103,16 90,59 102,38 109,50 95,58 86,67 104,83 86,56 96,84
993 994 995 996 997 998 999 1000 průměř minimum maximum směr. odch.
33,45 95,43 75,46 75,13 114,38 111,65 30,37 111,53 72,66 28,02 199,13 26,90
85,77 48,49 109,04 65,41 31,70 52,68 73,56 59,89 74,84 29,12 132,98 25,94
62,38 40,25 48,06 70,30 29,70 97,27 97,60 80,74 73,38 29,14 133,32 25,63
80,88 95,27 86,67 73,31 109,92 102,09 35,66 98,23 73,92 29,05 144,31 26,73
102,71 111,54 88,79 107,09 109,42 94,16 94,78 85,90 98,51 83,01 119,80 8,58
110,35 105,55 95,71 97,57 91,62 85,11 94,68 92,72 97,98 82,36 112,99 8,65
93,24 105,87 97,63 109,45 99,68 109,75 86,68 104,28 99,34 82,20 115,33 8,66
102,37 100,19 108,06 110,74 83,15 104,07 111,90 91,39 97,16 80,77 115,20 8,56
Oracle T1, T2, T3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
50,82 60,31 80,91 70,02 84,64 62,15 68,76 65,14 67,45 50,32 83,15 52,67 87,78 55,56 54,39 85,71 58,20 59,56 42,77 73,92 61,59 87,66 50,72 60,06 73,60 69,42 82,08 45,09 84,96 70,02 44,43 59,50 44,94 41,97 60,78 84,30 84,28 82,27 52,58 65,21 61,23 85,68
T3, T2, T1
76,84 50,10 66,49 60,54 69,17 84,45 52,53 76,62 71,20 57,80 50,80 69,28 61,57 74,62 48,48 75,23 56,67 67,36 58,92 71,53 59,66 65,95 87,38 45,92 83,12 66,84 48,91 75,45 79,28 53,48 61,50 72,82 76,06 74,69 47,48 73,16 61,77 47,53 56,63 57,02 65,74 79,04
T2, T3, T1
63,71 54,23 51,84 58,57 50,50 79,91 82,27 80,01 71,15 64,66 54,15 44,15 72,90 80,72 54,14 64,32 88,43 75,48 83,67 85,10 83,69 56,50 41,53 83,84 83,36 66,07 89,41 77,10 66,25 68,61 66,52 63,73 63,84 54,08 68,54 64,69 71,89 47,59 80,60 45,12 42,97 82,92
T2, T1, T3
46,11 70,40 77,50 83,87 76,61 71,81 66,66 61,04 56,25 49,03 45,72 47,62 50,47 71,27 47,04 41,23 58,00 55,47 82,20 41,78 82,96 67,44 57,52 88,18 42,40 89,01 67,10 84,55 87,87 83,75 86,96 47,51 82,66 62,97 68,00 68,85 54,23 40,15 47,71 52,70 65,46 51,75
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
82,47 85,28 46,29 76,06 50,63 83,97 52,43 70,24 76,41 74,88 77,26 68,54 52,82 84,28 64,37 71,83 67,69 74,60 43,73 83,11 44,81 46,23 62,87 43,80 90,25 65,99 69,02 88,56 86,35 42,30 62,42 70,82 41,02 63,53 78,98 50,99 69,56 80,92 48,32 46,37 79,07 55,22 84,62 54,51 78,11 75,70 75,55 75,66 51,30 51,40
89,84 45,40 89,08 70,07 73,14 47,86 43,68 53,88 76,40 80,37 64,35 62,38 80,16 48,15 88,24 90,66 77,58 83,86 90,27 76,05 85,57 65,27 73,27 65,62 60,46 56,09 88,40 69,62 61,70 72,82 87,43 47,42 48,47 47,46 82,38 85,43 75,73 64,90 83,17 78,52 74,52 79,49 87,90 75,33 42,23 63,28 73,89 46,46 63,08 46,17
70,42 56,55 73,61 87,61 44,30 68,35 51,60 41,19 51,78 53,33 83,83 61,10 53,16 53,93 46,45 68,56 73,54 45,05 65,75 60,96 69,87 69,34 56,80 58,22 67,93 84,26 75,51 42,79 88,22 54,52 56,02 63,65 76,01 73,68 64,99 73,48 59,30 77,01 51,10 79,46 79,06 58,21 68,31 82,16 65,33 43,29 63,88 71,57 59,95 70,31
42,03 73,28 45,75 66,98 56,27 82,88 80,05 69,70 43,99 70,05 81,15 75,32 44,75 59,24 70,18 52,48 76,40 63,82 88,17 83,80 63,60 66,03 59,13 57,11 45,56 71,51 81,18 86,89 55,35 49,36 58,29 58,14 40,37 47,40 68,77 76,90 46,81 68,22 71,68 86,96 59,28 45,06 67,74 71,56 63,58 65,63 88,51 61,19 52,38 40,01
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
62,51 43,01 43,50 62,00 52,03 61,60 52,66 67,36 47,37 88,39 78,94 80,65 56,49 55,01 84,14 76,85 46,71 88,27 42,28 49,37 50,27 55,71 75,08 64,03 42,33 67,84 58,83 73,49 77,39 76,57 51,42 47,09 57,57 65,53 76,26 57,85 51,57 50,48 73,08 89,22 42,27 89,55 71,86 65,28 43,47 68,63 69,60 49,78 48,20 60,11
47,03 81,00 69,88 61,23 87,66 78,23 88,10 48,42 74,64 66,25 79,81 62,61 87,61 79,79 71,02 63,78 43,57 60,65 77,77 87,04 65,47 61,36 64,23 57,55 78,70 80,81 69,86 61,32 70,18 44,96 46,62 71,90 51,98 49,39 76,49 75,89 76,47 79,30 61,08 47,70 55,22 42,91 52,64 51,19 49,07 43,54 76,97 87,87 83,50 48,49
46,68 76,56 52,41 83,41 78,03 67,88 61,82 76,27 72,27 43,42 47,51 49,15 86,38 40,50 73,18 70,29 65,47 56,11 56,81 87,16 61,44 59,47 79,19 82,65 47,36 86,12 83,18 48,61 64,59 71,87 59,37 77,59 60,26 58,97 64,62 87,83 55,92 89,71 45,72 58,73 66,37 57,30 52,49 60,32 55,72 70,73 48,08 78,06 74,81 42,52
88,95 66,35 81,73 58,02 70,71 53,64 60,24 88,08 48,30 69,27 76,59 86,00 53,10 86,62 58,38 89,25 73,93 89,45 77,76 50,83 58,61 87,77 55,87 50,74 67,36 41,94 79,73 53,39 41,53 44,74 80,75 72,22 76,02 88,49 52,51 56,40 44,77 85,12 71,16 74,39 84,18 43,02 58,05 62,94 72,59 61,21 73,47 41,61 88,74 42,29
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
70,93 56,77 90,69 72,78 72,17 82,64 62,48 67,93 62,58 65,47 45,21 64,24 76,71 54,61 61,42 57,45 75,85 72,10 88,21 68,91 52,71 73,88 72,90 50,09 44,23 57,57 76,91 42,38 63,07 44,28 61,02 59,21 82,39 88,58 83,44 90,23 42,57 53,38 69,60 71,81 66,18 68,18 45,77 77,79 82,24 73,88 48,27 65,20 57,43 43,24
43,94 82,26 41,90 45,11 45,11 86,51 43,37 74,88 70,71 74,57 79,99 52,65 62,15 50,75 67,90 63,90 87,65 73,35 60,77 85,33 67,10 45,05 48,55 65,33 55,05 55,14 82,58 77,06 76,19 82,86 76,35 69,20 74,01 69,40 76,32 65,81 81,33 42,67 85,17 65,89 73,86 63,49 71,30 44,36 87,59 72,19 88,03 72,19 67,89 60,15
80,89 48,54 60,09 80,95 49,45 64,78 51,91 57,02 41,44 56,93 82,05 73,76 40,22 73,24 47,92 40,31 73,85 85,64 50,81 84,17 74,46 46,86 51,83 65,26 76,75 41,25 63,12 73,77 51,40 66,19 61,57 80,27 61,18 45,38 89,70 80,22 67,16 52,39 85,80 66,17 75,40 64,40 84,76 81,55 48,15 60,81 54,70 77,12 72,86 61,05
85,72 64,03 40,62 82,02 81,15 77,87 82,70 82,62 73,63 82,68 68,03 81,66 44,13 76,61 77,30 48,89 45,40 64,16 75,05 40,75 49,43 45,50 81,56 58,97 70,41 86,33 84,37 76,87 84,82 87,89 84,23 54,52 89,87 77,44 50,70 85,63 71,10 63,13 85,34 81,53 77,76 89,33 58,84 89,74 73,62 53,88 44,11 83,97 47,59 65,96
193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242
88,62 52,62 53,10 68,15 74,65 81,86 63,25 79,24 64,19 47,07 73,16 78,62 80,11 45,75 44,04 43,13 68,38 83,89 88,93 87,98 52,58 46,17 62,78 61,89 65,26 77,15 56,97 70,79 84,62 82,14 41,79 44,63 71,68 56,08 60,88 55,54 53,16 83,08 43,58 50,02 75,20 53,81 56,89 82,59 80,07 42,33 46,79 89,43 66,48 69,74
89,10 71,97 68,48 57,50 68,06 49,54 76,94 51,84 85,08 70,36 87,22 64,13 75,31 84,78 76,84 48,00 79,34 86,55 53,49 88,12 89,57 81,87 62,09 65,00 81,79 55,45 55,03 51,75 72,48 54,24 72,55 80,70 86,17 79,36 42,67 70,41 48,47 60,37 61,61 76,60 82,86 88,92 68,69 75,74 47,17 87,77 51,70 66,42 79,11 88,25
76,13 53,04 87,82 75,32 83,28 82,42 83,35 63,03 43,41 59,67 57,56 49,85 54,00 86,85 60,12 76,06 59,48 62,59 46,46 62,06 43,52 73,90 55,00 86,93 51,72 42,24 63,75 75,16 86,43 77,94 84,85 85,76 67,79 41,39 85,88 84,61 87,32 70,82 84,30 67,29 43,01 70,69 43,49 69,63 78,29 72,70 75,52 49,21 70,92 57,50
79,93 78,92 64,30 74,78 84,60 87,54 89,41 46,12 51,95 47,15 83,02 78,59 60,03 66,52 51,51 88,33 81,88 76,83 89,08 82,06 46,21 82,08 73,73 84,68 88,74 76,20 61,36 44,78 48,17 64,46 78,17 67,38 70,62 75,11 74,31 46,15 45,09 40,66 48,68 86,69 46,85 67,50 78,78 84,48 79,95 73,82 69,38 54,97 73,47 63,05
243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292
64,34 66,62 89,18 85,14 46,50 78,29 62,80 63,82 67,26 57,72 83,72 55,33 83,96 62,46 50,42 69,56 41,45 68,35 75,64 82,12 90,69 64,29 56,73 86,30 57,14 85,24 48,85 85,76 43,18 78,02 78,43 88,69 87,18 54,98 54,11 47,89 62,20 76,16 53,99 41,12 43,13 47,05 67,33 61,17 68,78 55,52 85,82 59,56 77,78 58,14
57,13 89,15 50,88 56,83 73,84 58,01 79,68 62,76 70,88 48,23 64,02 52,86 77,82 51,44 89,97 70,29 74,46 54,69 84,81 77,67 60,87 45,30 82,92 90,53 54,74 82,90 89,72 79,30 86,12 61,38 75,86 83,68 53,05 58,32 61,73 85,79 48,48 83,60 87,92 42,82 82,67 49,23 48,70 57,94 74,97 80,76 60,34 90,53 41,41 43,78
88,54 41,35 81,45 54,15 47,88 54,63 83,46 83,87 51,21 74,06 50,41 70,61 51,20 84,44 47,40 50,96 87,05 56,53 89,27 83,62 50,44 64,89 40,02 81,25 72,31 88,40 51,28 54,56 86,41 45,62 67,85 40,74 73,32 74,83 46,34 84,97 57,07 83,77 85,73 70,21 58,64 79,83 61,81 76,67 77,77 70,57 47,25 43,35 61,75 50,69
40,79 40,66 70,58 44,34 57,42 70,48 52,81 56,92 70,05 70,84 76,24 55,73 72,30 68,73 79,05 89,70 51,87 73,35 82,89 84,20 74,56 46,37 56,19 68,77 43,37 57,62 83,62 56,78 63,27 40,31 40,36 67,30 61,92 52,38 47,97 43,73 48,40 47,16 45,94 59,46 76,81 73,43 74,37 81,60 67,89 83,57 83,57 50,32 40,84 87,41
293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342
63,92 43,23 42,00 81,96 47,73 66,06 49,64 89,62 56,90 49,61 79,11 62,48 81,60 41,61 82,16 62,47 72,87 74,13 45,89 42,52 66,44 42,83 54,24 58,24 83,76 53,84 71,75 58,34 65,56 62,42 90,21 47,97 56,04 62,30 89,84 67,43 84,64 45,34 44,60 51,58 53,77 78,06 86,59 84,89 66,32 72,53 64,61 67,30 56,07 67,24
69,67 47,55 83,03 77,49 84,18 59,98 45,59 68,01 75,63 67,55 77,41 73,43 88,13 60,81 65,32 70,51 84,25 53,15 68,62 59,11 88,84 44,50 70,80 73,80 80,98 82,39 84,50 43,16 42,70 71,73 72,93 90,56 70,86 46,85 57,40 64,07 53,43 70,89 58,15 82,14 64,59 42,51 65,19 72,37 50,10 47,85 41,65 64,03 82,51 85,73
57,00 45,31 62,00 42,16 61,53 71,19 80,91 52,91 43,18 55,87 69,01 43,37 76,31 81,10 40,51 56,17 65,92 83,38 66,47 60,43 77,57 52,22 46,41 78,24 89,15 54,25 61,35 45,33 85,74 69,12 48,96 48,91 49,47 73,89 42,87 58,59 78,88 45,02 78,86 51,32 67,58 44,85 50,09 76,17 80,54 63,79 84,28 53,79 60,33 41,66
86,19 71,09 54,62 62,47 62,17 74,53 83,56 68,20 74,12 69,05 44,65 81,26 44,51 83,59 49,84 47,26 89,98 66,55 49,57 46,08 85,36 47,38 50,34 74,31 89,01 70,90 52,90 56,28 57,37 89,79 77,86 53,62 41,42 67,90 41,02 40,13 89,52 46,73 65,46 42,75 80,55 69,19 51,24 41,09 72,25 50,82 68,35 56,06 44,52 57,79
343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392
81,06 54,01 52,83 89,96 73,02 54,90 58,85 49,22 63,07 44,71 49,54 79,65 51,00 88,26 46,80 42,01 44,97 79,20 65,74 82,08 72,90 52,50 43,72 49,62 63,31 83,24 41,82 44,28 54,62 80,23 84,71 83,86 90,26 82,39 45,97 77,71 53,99 45,27 56,28 70,49 82,34 81,80 88,79 41,25 86,49 86,87 88,60 51,91 43,37 66,79
75,81 64,39 66,76 47,45 86,16 81,88 84,46 53,04 86,49 44,41 52,74 73,23 54,62 43,61 88,56 43,83 53,10 63,66 47,63 90,73 43,18 63,04 55,24 90,56 60,42 47,35 63,49 66,95 49,23 46,90 75,53 65,35 46,98 72,77 41,60 86,28 65,34 58,04 55,61 88,04 72,50 52,53 62,70 60,76 70,50 65,90 66,10 42,52 75,10 87,30
76,88 49,13 78,70 63,56 51,08 67,06 65,27 68,59 82,31 74,11 77,51 43,50 60,58 75,49 70,32 70,44 81,58 68,66 59,97 43,51 70,16 86,74 89,40 54,62 75,67 86,09 71,92 85,23 80,70 76,20 40,98 87,91 63,12 51,92 74,92 50,89 52,18 64,58 68,34 66,00 54,08 79,94 59,52 80,91 73,35 82,68 51,88 65,63 50,03 53,87
80,79 53,97 89,49 85,73 78,60 78,89 55,24 88,20 53,08 59,78 59,45 52,78 81,20 67,64 49,07 72,98 45,27 87,02 53,62 49,73 56,29 56,06 63,32 65,33 58,13 79,01 46,57 59,35 67,49 47,79 87,28 66,69 87,79 78,05 54,95 86,65 84,67 62,10 46,18 55,50 74,21 53,06 54,63 82,54 83,60 63,79 63,40 78,05 77,63 45,69
393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442
85,78 67,47 70,13 90,01 77,79 89,99 42,31 61,53 85,05 86,20 53,59 65,59 43,85 79,64 79,18 52,93 80,81 71,05 80,34 51,82 80,99 67,12 66,93 83,64 51,68 41,00 64,30 67,30 55,95 62,73 59,35 52,54 69,04 51,22 75,35 77,56 82,09 61,26 44,37 44,12 41,13 63,10 49,22 64,48 54,31 78,85 86,49 63,44 79,98 68,48
71,21 68,78 66,85 84,11 47,46 74,55 55,08 54,20 56,96 87,41 70,87 49,51 46,02 79,39 56,83 58,18 75,64 62,43 88,44 42,58 83,28 72,13 82,94 71,43 82,83 51,73 49,52 76,74 42,04 74,49 45,47 80,30 46,49 84,65 73,84 53,87 87,35 69,32 52,05 75,17 61,33 68,48 71,62 41,17 87,69 60,90 79,54 65,37 65,33 42,33
48,37 86,79 63,05 82,46 61,33 72,47 49,73 85,92 49,00 66,95 55,31 52,34 42,52 72,36 73,87 58,54 43,64 81,92 48,00 63,34 73,35 64,34 74,39 64,51 88,60 61,22 65,32 67,87 45,59 76,95 59,49 79,56 88,12 59,56 85,98 78,19 66,18 54,97 81,92 72,67 41,15 59,07 61,15 41,75 44,96 80,57 53,52 87,18 67,93 58,58
67,46 41,42 50,14 46,45 45,29 51,36 49,65 45,73 40,47 60,32 86,24 48,70 63,13 48,48 84,40 57,50 43,62 88,23 48,84 83,15 65,40 60,58 58,11 70,82 55,05 41,28 51,78 77,30 54,34 87,07 88,64 67,72 87,72 54,56 74,87 67,17 70,26 80,53 81,59 56,36 66,35 48,85 58,06 53,29 83,66 87,84 84,79 49,87 82,70 71,65
443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492
76,63 88,85 88,45 49,38 86,27 52,93 84,30 77,24 86,14 59,35 69,73 88,39 70,88 73,34 72,96 66,08 81,60 61,38 50,59 48,72 42,09 69,01 45,82 89,62 79,22 67,62 71,19 86,98 75,56 53,07 81,84 78,94 79,15 46,27 85,35 43,32 90,66 56,49 48,93 56,78 86,03 69,41 62,88 64,62 75,43 75,63 57,07 86,20 57,63 53,93
44,95 80,00 69,34 80,83 88,39 66,99 58,50 44,75 86,32 75,49 65,70 76,95 63,35 46,40 84,20 82,90 42,35 45,46 68,55 86,28 81,18 52,55 50,41 68,26 64,74 63,16 73,53 83,38 52,84 68,22 52,40 89,75 68,60 88,01 61,61 51,36 61,40 74,31 64,17 79,04 81,85 87,12 78,67 53,50 66,72 52,71 90,69 43,42 51,48 90,59
89,93 69,99 81,24 74,33 41,58 42,19 87,07 85,24 44,71 46,82 44,65 63,95 48,19 86,01 51,11 60,89 67,07 73,10 67,40 51,18 63,70 75,51 85,62 71,20 70,70 43,84 80,54 64,35 63,65 80,64 56,68 44,93 48,15 72,88 59,82 74,69 63,94 58,39 86,96 41,56 68,72 59,53 41,57 44,01 68,32 71,91 69,60 83,78 70,78 56,77
81,04 47,43 64,87 73,96 88,23 63,70 40,59 66,61 63,71 57,89 62,99 75,02 86,72 53,82 43,94 74,12 87,68 66,49 50,75 57,50 59,32 55,64 49,24 81,30 52,57 60,13 57,75 50,83 57,12 64,77 69,85 84,03 67,35 77,33 42,05 60,72 57,85 65,13 73,06 81,69 84,98 68,51 67,55 78,20 63,70 47,09 52,59 85,53 61,29 44,84
493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542
76,71 77,42 49,21 72,95 85,41 82,76 53,48 49,78 54,34 66,89 74,49 69,47 73,43 90,92 78,11 48,52 75,38 44,19 56,15 53,22 53,52 78,28 71,93 59,86 86,13 87,00 46,36 53,21 47,26 79,74 52,71 51,77 54,30 44,87 61,98 64,11 45,30 73,16 78,29 84,72 43,13 41,62 50,15 61,32 47,86 44,04 60,50 90,53 56,97 41,30
63,53 83,85 67,09 78,25 83,53 86,07 44,52 61,38 64,84 41,88 58,46 66,68 60,50 59,73 58,25 47,00 49,18 70,27 90,09 70,65 87,01 72,98 81,15 72,48 54,67 88,37 64,12 52,99 42,17 63,03 77,03 85,61 62,91 85,90 87,13 60,37 53,36 88,34 82,52 84,24 84,89 63,69 55,74 67,05 87,60 53,82 72,56 87,90 46,03 68,91
88,75 80,79 40,38 58,86 49,11 60,50 70,26 43,60 54,56 85,60 42,63 55,07 49,79 45,88 44,58 78,15 71,27 69,82 85,61 65,64 50,23 81,47 85,14 54,32 66,26 64,04 83,74 75,34 62,73 70,22 53,49 78,60 56,26 83,33 73,25 74,67 42,26 59,83 80,83 48,04 64,79 57,82 44,73 53,88 68,24 58,18 89,30 58,71 62,22 46,64
64,50 52,21 48,69 79,51 52,08 47,28 54,81 84,61 54,37 65,00 69,55 82,35 84,31 63,76 86,97 74,39 88,99 50,39 76,35 57,86 78,26 87,40 67,87 79,44 75,31 51,07 79,09 52,94 72,90 55,86 51,02 68,28 59,77 55,30 70,49 84,94 41,63 51,32 69,45 80,02 65,02 42,62 76,62 69,88 76,26 77,82 41,48 71,74 74,68 40,77
543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592
83,50 63,93 73,82 86,82 76,10 63,84 60,04 75,09 75,59 70,12 85,75 78,54 86,43 77,60 56,11 83,78 54,57 84,54 74,08 89,36 53,59 71,02 61,22 73,35 81,90 82,72 60,90 61,11 78,92 41,22 45,30 66,61 53,68 69,83 49,15 61,62 72,22 84,31 48,73 47,69 80,37 80,40 54,12 60,37 49,76 80,76 44,75 54,94 44,99 79,72
53,73 68,14 54,59 46,11 49,90 49,51 56,22 49,84 69,21 56,69 60,85 89,33 85,57 77,70 62,06 52,79 89,96 90,14 58,30 61,71 72,41 85,04 62,73 66,42 60,09 56,91 76,86 67,40 79,22 53,71 83,42 75,10 74,37 67,35 52,02 65,27 80,61 44,97 89,92 85,16 43,32 56,35 78,32 44,11 62,58 59,12 43,70 83,20 77,78 59,06
53,96 72,28 68,82 89,62 57,88 66,61 68,57 76,48 47,96 65,59 90,00 78,44 83,51 73,75 84,68 58,59 74,52 79,52 47,06 52,26 76,66 66,68 75,76 70,43 67,89 68,50 75,54 73,26 49,21 60,07 47,25 76,66 65,94 85,04 79,21 56,08 75,26 82,32 63,09 76,11 84,24 49,00 45,87 83,15 83,52 56,94 72,17 45,49 86,87 48,77
68,50 81,22 61,30 42,17 82,93 57,19 45,29 57,20 88,96 67,77 49,42 68,34 76,06 85,54 89,49 71,92 61,03 62,01 49,84 50,43 68,42 41,81 85,57 75,74 46,44 79,73 46,25 69,15 86,49 64,36 59,50 48,37 54,43 77,08 82,33 40,13 77,12 49,77 59,75 61,17 57,16 60,56 75,91 79,19 62,30 43,69 57,84 42,08 52,65 65,48
593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642
73,82 50,65 65,22 45,17 42,10 88,02 80,33 62,73 66,11 58,13 55,19 74,42 59,66 68,88 88,93 52,16 88,41 42,96 50,14 86,05 42,22 57,07 80,77 89,74 56,53 62,97 73,65 62,46 49,77 55,83 74,22 51,11 84,80 44,37 55,47 68,37 50,29 45,08 83,59 71,60 75,81 69,42 65,26 66,31 89,57 81,42 83,09 60,81 41,23 51,00
50,16 50,38 70,04 46,11 80,56 63,84 57,09 73,53 46,34 58,35 55,43 86,65 73,38 51,10 78,87 53,18 68,83 89,89 47,93 78,70 51,97 57,87 47,53 80,97 43,32 45,39 62,02 79,76 53,54 77,22 82,01 58,92 56,26 55,50 46,75 61,19 70,66 48,33 46,04 66,11 70,25 43,43 79,85 78,54 44,21 73,60 50,54 84,20 71,40 68,88
82,57 72,35 67,48 78,45 74,34 79,11 64,29 48,91 42,72 67,64 43,77 48,27 84,40 61,55 47,37 59,60 85,95 53,32 69,84 62,63 44,42 63,52 76,22 62,36 89,20 61,22 56,53 75,07 59,38 63,14 42,23 55,31 88,20 49,53 40,85 55,22 53,91 67,64 55,66 67,66 87,06 67,94 87,16 53,39 52,20 86,21 58,31 68,86 45,15 67,52
80,64 85,81 60,66 88,00 42,82 77,18 43,32 40,22 44,61 73,38 72,56 71,54 52,33 78,91 43,12 66,75 52,95 57,70 53,60 46,05 87,79 46,62 67,90 71,03 81,82 88,63 89,13 81,25 40,36 67,09 84,06 86,94 54,01 87,11 88,31 88,50 63,61 61,85 61,01 40,35 75,74 44,26 46,89 77,11 45,10 74,90 42,05 48,88 83,19 56,54
643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692
75,60 63,84 90,07 79,36 68,35 71,57 48,70 48,86 73,79 71,61 55,76 60,73 74,13 66,11 86,29 44,62 60,62 85,08 59,73 63,43 65,15 78,62 88,23 54,16 88,52 48,21 71,58 76,94 51,72 49,85 68,66 63,26 54,98 49,53 80,06 65,93 58,19 47,15 41,77 79,44 84,36 49,38 48,86 41,81 86,96 84,65 69,59 84,82 75,50 58,97
53,28 83,30 87,90 81,76 84,43 73,20 42,63 72,57 89,92 48,47 66,75 63,91 46,80 90,04 80,95 76,71 65,64 84,30 61,75 66,87 42,99 74,63 68,45 69,57 86,30 52,69 53,09 59,49 83,94 50,12 86,77 89,92 76,94 76,39 79,33 49,22 61,28 62,52 45,81 58,66 52,43 47,49 76,03 64,39 54,37 64,46 68,39 89,26 41,74 87,61
41,92 57,15 84,21 87,41 88,06 78,73 81,81 50,00 74,37 58,80 86,80 54,82 85,10 81,95 56,69 66,15 44,03 71,04 76,40 42,73 50,86 60,19 61,20 58,57 46,58 48,75 79,76 69,24 71,52 51,78 58,01 43,28 66,62 71,81 49,16 53,29 55,64 69,06 59,09 59,72 76,26 81,75 66,78 58,34 61,39 60,20 48,27 57,20 79,13 72,81
87,51 43,51 82,48 47,38 74,99 81,99 57,20 59,14 88,67 80,40 52,83 40,87 70,06 62,43 62,56 89,24 74,46 59,19 74,57 60,66 76,38 60,12 53,71 67,85 72,04 85,19 59,92 54,12 65,19 85,80 41,73 86,14 89,59 55,89 80,20 62,39 53,14 73,86 61,88 70,90 65,61 78,40 72,80 82,76 48,27 73,49 73,60 71,00 62,27 46,68
693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742
44,74 58,88 42,22 84,43 63,56 87,43 88,72 90,19 65,08 46,42 89,36 71,84 49,85 59,76 56,31 63,50 62,80 59,12 41,28 58,93 90,58 58,36 42,45 76,84 71,69 57,62 60,93 90,70 47,52 76,18 83,11 47,15 46,44 41,15 58,87 50,22 77,19 62,40 41,26 81,73 48,53 48,62 90,84 46,50 80,67 90,48 69,17 44,89 63,21 53,58
77,18 81,58 47,02 54,97 73,85 61,04 70,53 85,48 73,49 51,68 64,33 46,40 84,72 73,02 56,17 66,34 85,75 87,05 72,55 59,70 78,49 77,42 88,42 84,03 66,49 72,52 67,24 47,40 44,41 76,41 58,25 74,49 58,07 48,84 70,84 83,10 47,51 87,99 70,70 62,44 83,63 66,82 68,99 81,64 71,53 90,22 82,95 58,50 82,24 44,89
68,57 59,97 55,88 62,15 48,53 82,54 46,51 42,11 49,32 77,76 52,29 58,79 77,08 46,04 53,40 53,25 61,58 47,16 83,86 62,65 56,22 48,90 66,86 43,66 50,24 40,46 58,90 67,27 49,60 50,23 77,40 83,77 52,61 45,55 57,90 52,33 83,11 61,03 46,48 53,90 40,47 81,04 59,81 83,53 41,89 88,27 72,22 84,93 57,40 72,92
60,66 42,45 69,52 86,24 52,43 75,63 70,00 54,41 87,53 64,20 76,54 75,53 66,96 76,66 65,67 60,15 77,92 64,85 68,32 81,12 83,61 65,75 68,04 85,67 55,23 42,92 78,93 87,86 87,51 86,62 79,26 76,58 40,55 83,66 64,44 82,64 75,37 56,13 41,97 87,48 42,05 57,28 71,50 58,83 89,64 85,05 59,20 56,62 83,93 77,02
743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792
63,55 65,73 66,11 85,21 66,59 76,87 76,97 42,32 88,51 49,27 57,51 58,67 84,71 73,56 46,53 88,80 41,23 55,60 42,42 46,87 88,90 90,20 89,13 79,60 47,75 87,94 42,99 53,93 50,82 84,80 64,33 45,97 73,90 83,48 75,44 55,53 60,29 56,44 66,15 76,74 87,04 62,36 70,01 78,02 90,36 60,22 69,31 61,62 81,02 69,07
54,03 62,67 72,52 60,02 56,14 81,37 89,28 69,73 77,84 88,35 53,51 52,07 83,64 54,18 49,43 48,35 72,54 49,81 51,85 50,03 71,79 57,48 76,62 53,55 60,62 79,99 56,73 72,76 81,36 81,99 53,20 83,88 90,46 78,43 46,76 67,88 73,91 78,47 50,75 58,24 60,72 81,56 74,16 43,90 86,41 90,85 42,20 79,40 88,45 65,26
77,51 55,32 89,68 69,27 64,53 47,71 56,32 50,28 69,83 59,45 76,58 66,46 86,98 73,65 50,49 73,72 81,34 47,51 48,50 42,70 50,61 42,49 77,26 86,33 40,62 57,52 40,20 49,17 88,85 59,02 40,94 42,99 82,42 85,00 48,70 45,08 79,68 51,13 66,04 75,67 42,35 72,59 47,16 75,64 47,97 66,31 45,03 74,28 67,06 72,33
48,25 48,88 59,40 50,40 70,81 81,97 67,44 68,75 85,46 87,51 48,05 74,86 66,79 52,51 42,70 53,10 51,94 55,80 83,47 84,23 54,98 51,17 80,94 65,96 71,58 75,40 89,24 82,11 68,31 57,60 48,70 57,90 67,73 77,62 45,77 83,44 68,72 50,19 81,51 42,59 54,28 84,47 89,87 45,99 44,20 51,56 46,29 43,60 71,32 71,07
793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842
54,29 87,69 64,41 68,75 74,81 61,05 46,12 83,43 86,73 60,63 48,84 65,32 43,07 89,08 85,70 72,50 70,64 64,65 46,74 85,18 64,01 58,18 88,35 46,44 63,98 76,07 72,93 87,43 80,60 73,40 63,46 83,97 49,91 64,48 74,21 56,16 83,20 49,13 65,32 59,69 89,52 72,91 90,57 84,66 76,03 84,51 45,50 77,01 48,38 41,03
84,82 63,62 45,88 58,39 89,17 69,07 41,58 71,53 61,29 51,82 61,85 66,69 79,67 83,44 48,34 67,73 53,10 59,57 54,18 64,79 81,66 86,74 82,93 83,46 70,24 41,65 53,67 83,02 56,75 83,42 42,91 53,64 72,84 81,91 51,04 53,22 82,41 41,76 87,78 83,84 82,39 83,90 58,88 65,59 53,34 54,52 57,04 78,91 61,28 46,99
58,93 48,31 65,26 76,33 88,05 72,93 46,73 88,66 54,46 82,69 75,25 82,20 48,80 88,76 89,94 68,47 59,39 54,12 49,34 44,88 61,38 73,10 56,60 48,38 43,04 89,09 51,95 70,13 44,96 46,70 54,97 56,02 63,18 66,75 61,85 63,96 58,96 53,33 68,74 83,57 71,60 75,95 87,49 52,45 78,17 41,22 50,39 69,45 42,64 71,15
49,88 82,86 75,27 81,26 41,66 54,06 53,76 55,88 80,89 85,68 70,76 66,91 66,31 55,28 72,61 68,51 83,98 60,41 61,03 77,72 41,85 88,42 85,18 54,37 89,18 79,74 60,96 62,43 57,93 56,39 87,54 70,41 44,78 49,28 57,90 62,79 46,18 71,76 79,11 89,35 40,95 54,47 81,83 44,92 66,97 42,51 75,37 78,49 52,55 56,14
843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892
85,62 79,25 74,56 52,44 79,79 88,47 52,95 62,92 82,95 90,60 43,81 79,63 58,80 44,34 64,15 89,11 56,34 81,34 78,38 53,42 58,43 85,92 45,40 55,14 44,81 50,20 60,40 90,08 83,15 86,86 65,88 89,61 81,83 48,89 48,09 49,45 76,57 54,62 86,84 68,95 66,92 54,66 89,77 77,92 58,73 65,60 65,38 87,46 63,28 46,26
47,94 53,56 90,78 81,83 74,09 45,53 85,02 71,65 44,35 55,76 58,22 73,87 79,73 85,80 73,10 58,65 74,87 76,88 48,29 86,56 44,66 87,17 53,74 72,31 62,11 83,07 90,34 72,90 55,37 80,25 85,02 49,56 78,44 83,02 56,72 66,77 62,73 75,70 55,48 72,03 46,59 59,54 53,28 74,33 52,82 70,77 66,67 74,05 65,36 62,81
43,43 87,21 68,03 75,26 73,29 67,35 44,56 43,68 53,39 43,99 86,09 88,26 80,26 77,99 57,83 54,93 45,72 65,20 72,49 59,92 78,98 78,48 71,68 46,64 55,92 48,66 68,64 50,98 62,68 59,30 53,72 85,85 40,61 51,38 42,88 41,79 89,15 50,95 55,50 71,14 46,12 74,44 72,63 57,48 64,53 77,97 44,09 72,05 44,93 63,01
89,02 40,08 77,00 70,23 55,69 72,23 86,97 58,01 52,13 69,27 74,27 77,39 82,94 44,76 60,14 65,24 79,86 58,99 87,21 76,83 50,86 69,84 56,82 68,73 89,76 52,12 88,05 62,72 53,62 52,80 85,84 80,18 48,41 61,08 70,39 43,04 59,75 42,83 73,91 43,02 58,36 78,65 84,39 53,75 60,64 76,32 88,94 86,38 42,42 73,92
893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942
53,39 90,97 72,73 65,82 48,37 48,01 71,95 58,58 71,32 72,04 46,23 68,41 71,58 89,33 73,80 49,64 77,29 76,13 87,30 42,24 54,90 79,98 69,47 90,53 42,35 83,14 73,07 48,02 83,58 59,05 79,16 50,34 51,52 54,31 53,21 73,30 55,40 79,20 63,56 82,14 70,43 55,29 88,03 90,67 47,69 55,34 87,98 64,12 77,43 79,05
85,61 41,72 71,07 72,25 73,94 70,80 78,76 48,29 73,63 56,46 79,52 80,48 47,74 54,75 43,63 51,94 43,81 47,49 70,64 87,18 73,41 74,29 51,79 41,74 67,39 61,85 43,97 42,37 81,52 70,87 81,89 50,02 77,66 78,94 71,65 75,01 75,13 81,36 83,50 54,33 77,53 52,67 52,37 85,09 79,77 74,07 43,07 59,76 51,65 69,56
62,75 69,43 84,39 73,43 60,27 73,95 42,26 48,16 42,46 49,38 52,75 83,52 46,05 74,91 65,17 83,39 41,63 74,39 66,25 67,27 88,93 43,23 83,79 86,84 85,49 40,62 76,09 77,70 83,06 54,84 74,76 86,25 60,28 86,42 68,79 71,79 85,92 60,32 74,65 72,34 46,85 89,02 48,25 72,94 83,98 65,48 87,70 68,21 40,81 81,59
59,49 45,60 74,21 76,22 89,62 42,36 67,22 61,55 43,16 53,78 46,69 73,97 73,74 43,45 81,68 79,26 52,15 71,88 51,18 88,69 73,05 77,78 69,37 78,75 65,37 55,88 47,88 78,69 81,15 86,95 47,28 59,32 81,79 45,40 69,55 55,89 50,59 45,09 87,89 58,29 88,32 86,46 58,91 45,36 58,94 42,09 51,01 67,39 72,43 87,81
943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992
50,68 55,82 75,55 83,25 56,95 68,28 78,23 64,34 84,89 60,18 67,60 49,56 87,31 59,31 87,64 64,02 80,79 88,90 48,48 70,39 49,74 59,19 47,01 70,71 66,14 53,83 43,60 67,59 66,73 85,39 50,53 57,66 64,53 65,95 55,57 50,39 56,00 90,78 53,99 62,91 76,66 81,78 60,65 90,19 54,35 60,41 69,21 51,65 61,70 76,60
43,07 47,88 75,39 48,93 48,67 67,31 53,26 48,28 74,53 80,36 79,66 49,85 89,63 89,63 78,06 48,19 87,71 55,65 61,35 89,85 51,96 88,10 53,36 82,78 87,10 45,69 84,21 79,39 86,28 86,06 62,52 49,08 67,33 59,54 89,49 84,32 68,94 47,82 76,07 71,61 81,18 76,65 89,46 57,73 87,91 78,13 63,91 62,70 79,86 69,91
83,50 53,13 83,21 74,81 73,44 40,22 60,95 75,85 78,91 44,15 71,99 67,59 53,15 81,22 57,20 55,87 81,06 63,62 68,86 47,95 67,84 52,43 88,29 43,00 89,73 62,10 76,68 88,89 87,68 82,72 58,48 63,48 46,15 60,35 64,10 53,91 77,13 69,79 76,12 71,98 43,83 51,62 77,21 47,14 44,58 73,90 89,44 68,07 58,78 55,81
52,38 47,97 42,42 73,55 78,69 77,93 79,65 89,82 57,94 87,92 73,75 41,65 64,22 72,19 41,73 61,51 86,56 41,59 48,97 59,95 51,56 69,68 49,12 55,59 41,73 41,72 64,03 46,51 57,50 63,84 78,48 65,04 52,24 89,22 70,40 72,38 68,00 74,11 47,34 63,38 85,07 48,31 74,71 41,91 60,52 51,67 64,56 49,76 42,56 61,94
993 994 995 996 997 998 999 1000 průměř minimum maximum směr. odch.
66,64 61,94 88,86 68,04 70,74 58,52 56,99 74,53 65,98 41,00 90,97 14,73
90,28 81,43 52,78 47,92 44,95 74,83 74,29 53,24 67,07 41,17 90,85 14,35
84,72 65,89 62,54 57,59 43,17 47,83 42,88 72,55 64,76 40,02 90,00 14,27
46,08 88,63 44,66 48,49 57,03 58,01 41,09 86,70 65,48 40,01 89,98 14,91
Shrnutí předchozích tabulek
průměr minimum maximum směr. odch.
průměr minimum maximum směr. odch.
průměr minimum maximum směr. odch.
T1, T2, T3 72,66 28,02 199,13 26,90
MySQL T3, T2, T1 T2, T3, T1 T2, T1, T3 74,84 73,38 73,92 29,12 29,14 29,05 132,98 133,32 144,31 25,94 25,63 26,73
T1, T2, T3 98,51 83,01 119,80 8,58
MSSQL T3, T2, T1 T2, T3, T1 T2, T1, T3 97,98 99,34 97,16 82,36 82,20 80,77 112,99 115,33 115,20 8,65 8,66 8,56
T1, T2, T3 65,98 41,00 90,97 14,73
Oracle T3, T2, T1 T2, T3, T1 T2, T1, T3 67,07 64,76 65,48 41,17 40,02 40,01 90,85 90,00 89,98 14,35 14,27 14,91
Indexy Následující tabulky a grafy vzkly při měření vlivu indexů na rychlost dotazu.
Vliv indexů na MySQL RS AS INT DT
1 2 3 4 5 6 7 8 9 10 AV
Random String Alphabetic String Integer Datetime
RS 1594,97 1645,33 1652,33 1658,73 1557,13 1512,79 1612,09 1620,18 1668,80 1595,81 1611,82
RS_i 584,05 709,89 594,71 691,76 674,43 555,35 683,14 575,03 584,07 574,21 622,66
AS 1743,95 1739,17 1693,58 1654,60 1975,69 1699,31 1664,44 1865,45 1813,74 1839,44 1768,94
RS
61,37 %
AS
_i
s indexem
AV
průměr
MySQL AS_i 1328,55 1214,96 1219,37 1089,72 1185,94 1171,51 1260,53 1216,38 1294,88 1104,58 1208,64
INT 1721,35 1618,19 1681,29 1608,15 1738,37 1618,63 1560,25 1558,75 1699,87 1585,53 1639,04
INT_i 467,96 572,47 478,35 473,36 572,09 452,95 583,38 423,33 519,15 578,29 512,13
DT 1774,69 1643,13 1749,06 1750,01 1647,02 1613,20 1625,04 1620,16 1763,20 1723,31 1690,88
DT_i 590,40 580,12 592,70 598,29 524,66 500,97 550,95 559,85 572,83 519,60 559,04
INT
68,75 %
DT
66,94 %
31,67 %
MySQL
čas [ms] 1800 1600 1400 1200 1000 800 600 400 200 0 Random String
Alphabetic String s indexem
Integer bez indexu
Datetime
Vliv indexů na MSSQL
1 2 3 4 5 6 7 8 9 10 AV
RS 1280,49 1019,85 36,24 1077,01 943,45 945,21 1025,32 948,13 1043,11 920,04 923,89
RS_i 372,73 501,45 466,53 385,97 466,75 339,53 369,75 327,90 370,61 436,60 403,78
AS 1263,42 1086,47 1045,94 1153,90 1098,84 1044,18 1175,22 1143,38 1032,70 944,87 1098,89
RS
56,30 %
AS
MSSQL AS_i 381,61 335,36 371,00 392,10 380,70 336,57 337,89 359,92 303,80 370,06 356,90 67,52 %
INT 1558,30 907,19 1041,22 1052,57 1041,76 1028,76 1029,63 996,57 1039,95 997,46 1069,34
INT_i 250,72 217,36 195,88 205,42 208,95 196,58 187,20 205,26 188,49 206,02 206,19
DT 1469,32 1073,43 1059,85 951,78 1118,07 951,40 963,66 1085,95 1111,62 1019,80 1080,49
DT_i 272,19 238,45 246,22 227,43 248,84 237,05 238,83 214,58 249,74 226,40 239,97
INT
80,72 %
DT
77,79 %
MSSQL
čas [ms] 1200 1000 800 600
400 200 0 Random String
Alphabetic String s indexem
Integer bez indexu
Datetime
Vliv indexů na Oracle
1 2 3 4 5 6 7 8 9 10 AV
RS 111,52 109,05 121,41 111,03 112,50 119,66 110,41 106,22 125,26 111,83 797,22
RS_i 75,82 90,80 93,49 83,23 90,53 87,61 76,91 83,64 80,04 90,08 255,65
AS 109,13 118,15 117,24 106,15 115,65 113,33 105,34 121,01 111,68 120,39 796,65
RS
67,93 %
AS
Oracle AS_i 90,57 103,97 102,15 90,32 101,58 102,88 94,05 97,48 96,57 93,85 292,02 63,34 %
INT 91,63 86,10 74,03 83,42 80,35 88,51 89,50 76,34 76,93 84,34 581,81
INT_i 68,69 54,52 68,72 67,69 57,99 64,97 61,39 67,41 51,83 52,38 184,68
DT 90,18 99,11 89,01 95,16 86,78 101,55 82,67 101,34 89,54 95,22 651,39
DT_i 56,29 65,59 59,05 73,73 69,80 65,56 73,52 72,10 67,48 58,43 198,46
INT
68,26 %
DT
69,53 %
Oracle
čas [ms] 800 700 600 500
400 300
200 100
0 Random String
Alphabetic String
s indexem
Integer
bez indexu
Datetime