Веднъж работих с много голяма (Terabyte+) MySQL база данни. Най-голямата таблица, която имахме, беше буквално над милиард реда.
Проработи. MySQL обработваше правилно данните през повечето време. Беше изключително тромаво обаче.
Просто архивирането и съхраняването на данните беше предизвикателство. Възстановяването на таблицата ще отнеме дни, ако трябва.
Имахме множество таблици в диапазона от 10-100 милиона реда. Всички значими присъединявания към таблиците отнемаха твърде много време и биха отнели вечно. Така че ние написахме съхранени процедури, за да „разхождаме“ таблиците и да обработваме обединения срещу диапазони от „идентификатори“. По този начин ще обработваме данните 10-100 000 реда наведнъж (Присъединете се срещу 1-100 000 на идентификатора, след това 100 001-200 000 и т.н.). Това беше значително по-бързо от присъединяването срещу цялата маса.
Използването на индекси за много големи таблици, които не са базирани на първичния ключ, също е много по-трудно. Mysql съхранява индекси на две части - той съхранява индекси (различни от първичния индекс) като индекси към стойностите на първичния ключ. И така, индексираните търсения се извършват в две части:Първо MySQL отива към индекс и извлича от него стойностите на първичния ключ, които трябва да намери, след това прави второ търсене на индекса на първичния ключ, за да намери къде са тези стойности.
Нетното от това е, че за много големи таблици (1-200 милиона плюс редове) индексирането спрямо таблици е по-рестриктивно. Имате нужда от по-малко, по-прости индекси. И правенето дори на прости оператори за избор, които не са директно в индекс, може никога да не се върне. Където клаузите трябва натиснете индекси или забравете за това.
Но всичко това, което беше казано, нещата наистина работеха. Успяхме да използваме MySQL с тези много големи таблици и да направим изчисления и да получим правилни отговори.