mysql compare

21 отговора 0 прегледа
#1

mysql compare

Здравейте,

имам следния проблем : Да си представим, че имаме таблица А и таблица В. Всяка от тези таблици има само по една колона тип инт, която се нарича ИД примерно. Целта ми е да намеря всички ИД-та от таблица А които не се срещат в таблица Б. Пробвах следното :

select A.id from A left join B on A.id=B.id where B.id is null

Това работи, но е аааадски бавно. При малко по-натоварен сървър отнема към 10-15 часа!!! В двете таблици има м/у 10 и 20 000 000 записа, като 99.99 % се повтарят, има най-много 20тина, които не се срещат в таблица Б.

Търся по-бърз начин за намиране на липсващите записи. Отворен съм за всякакви предложения.

Благодаря предварително



П.С.
използвам mysql 4.0.20-standard ( не ме питайте защо, не мога да го променя ), едната таблица (тази с по-малкото записи) е InnoDB, а другата - MyISAM


Time is like a drug. Too much of it kills you.
Отговор
в отговор на killall #2

Re: mysql compare

Избрал си оптималната заявка предвид структурата на данните, която си описал, но все пак става въпрос за изчислението на 40 трилиона комбинации, така че е напълно нормално да отнеме повечко време.

Предвид на версията на MySQL, която използваш и съответно невъзможността да използваш спусъци, имаш ли възможност да контролираш вкарването в тези две таблици по някакъв начин и колко често се случва това? Изобщо можеш ли да дадеш малко повече информация за процесите, които са свързани с тези данни - откъде идват, колко често, и т.н.

Everything louder than everything else...
Отговор
в отговор на Dakota #3

Re: mysql compare

Мдам, може би трябваше да опиша ситуацията, накратко :
Обслужвам един голям онлайн шоп за книги, ЦД-та и всякакви други електронни и печатни медии. Задачата ми е за всеки един артикул да генерирам един ХТМЛ файл, това се прави за целите на Гугъл оптимизацията. Таблицата Б се манипулира от операторите на сайта, добавят нови данни, променят и т.н. Посредством mysql репликация промените се отразяват на моя сървър. Всеки ден генерирам нови ХТМЛ-и за променените артикули и в таблица А записвам ИД-тата на новогенерираните страници. До тук всичко изглежда лесно. Но преди няколко седмици излезе проблем с изтритите артикули. Когато от таблица Б се изтрие даден артикул, ХТМЛ файла за него остава онлайн и все още може да бъде достигнат през Гугъл. Това по принцип не би трябвало да е проблем, но се оказа че даже е голям такъв. Собственика на сайта поиска от мен да генерирам празни страници за всеки един изтрит артикул (да пише "този продукт вече не се поддържа ала бала ..."). Оказа се, че софтуера, който ползват за обслужване на сайта няма възможност да даде справка за изтритите артикули, те просто в един момент изчезват от таблица Б. Единственото решение, до което стигнах е периодично да сравнявам списъка на генерираните страници със списъка на актуалните артикули и при разлика да генерирам празни страници за продуките. Това е и целта на горното "безумие"

Та на въпросите ти :

Мога да контролирам единствено вкарването на данни в таблица А. Таблица А се ъпдейтва веднъж дневно. Таблица Б се ъпдейтва в произволен момент от операторите на сайта и по никакъв начин не мога да контролирам това


Time is like a drug. Too much of it kills you.
Отговор
в отговор на killall #4

Re: mysql compare

Без да имам опит в репликацията с MySQL, това за което се сещам е да се опиташ да четеш по някакъв начин репликационните логове с mysqlbinlog и да им правиш след това синтактичен разбор (parse). Разбира се, възможно е да има и по-добро и чисто решение.

Колкото до генерирането - не можеш ли вместо да генерираш файлове, да имаш един PHP скрипт, който да ги генерира динамично?

Everything louder than everything else...
Отговор
в отговор на Dakota #5

Re: mysql compare

В отговор на:


Колкото до генерирането - не можеш ли вместо да генерираш файлове, да имаш един PHP скрипт, който да ги генерира динамично?




Не, абсолютно невъзможно
Google повече харесва статични HTML-и. Тези HTML-и са само за Google. На сайта разбира се се използва ПХП за артикулите. Чрез тези HTML-и PR за 1 година се вдигна от 2 на 6

Относно парсването на binlog-a и аз си мислех за нещо такова и в момента дори го мъча.


Time is like a drug. Too much of it kills you.
Отговор
в отговор на killall #6

Google

Че Гугъл откъде може да знае дали въпросните HTML-и са статични или динамични?!

Everything louder than everything else...
Отговор
в отговор на killall #7

Re: сложничка задачка

Изкушавам се да ти предлогжа една схема която за съжаление се съмнявам, че ще поработи.

> използвам mysql 4.0.20-standard

Пускаш при теб втори сървър с 5.0.x

* Закачаш го да репликира или директно от отдалечения Master или от твоя 4.0.20
* Указваш му да репликира само таблица Б

* Върху таблица Б дефинираш спусък при DELETE който да вмъква id на изтритите редове в таблица В

Примерно:

CREATE TRIGGER del_trigger BEFORE DELETE ON b FOR EACH ROW INSERT INTO deleted VALUES(OLD.id);


При тази постановка можеш да вържеш приложението което генерира файловете към двата твои сървъра едновременно и когато те интересуват изтритите редове да питаш В таблицата на 5.0

Още сложен вариант би било да дефинираш тази таблица В като FEDERATED с отдалечен оригинал на твоя 4.0.20 сървър.

Дали всичко това ще сработи честно казано не знам.

За съжаление 4.0 -> 5.0 репликация не е нещо на което бих разчитал напълно. Много зависи от структурата на конкретните таблици.

Поради тази причина не ти препоръчвам направо да смениш твоя локален сървър с 5.0. На теория би трябвало да може.

salle.online.bg/sig
Отговор
в отговор на killall #8

Re: mysql compare

>> В двете таблици има м/у 10 и 20 000 000 записа, като 99.99 % се повтарят

Защо не направиш 2 времении таблици A2 и B2, само с 1 колона id (неповтарящи).
ПОСЛЕ да ги индексираш.
И да си пускаш заявата за A2 и B2.

Отговор
в отговор на Йopдaн #9

Re: mysql compare

Явно не си ме разбрал правилно : 99.99% от записите в таблица А ги има и в таблица Б. Целта ми е да намеря кои записи ги има само в А и ги няма в Б.

Иначе локално за таблиците ИД-тата са си уникални


Time is like a drug. Too much of it kills you.
Отговор
в отговор на salle #10

Re: сложничка задачка

Интересна идея, но и на мен ми се струва че няма да е много читава. Имам лоши спомени от репликация м/у различни major версии на mysql (в интерес на истината тогава беше м/у 3.х и 4.х но се съмнявам че ще е много по-различно).

В момента се боря със хората от сайта да ъпгрейднем техния mysql до 5.х, ако не успея пак ще мисля какви магии да правя.


Time is like a drug. Too much of it kills you.
Отговор
в отговор на Йopдaн #11

Re: той вече го е направил

От оригиналния въпрос:

"Да си представим, че имаме таблица А и таблица В. Всяка от тези таблици има само по една колона тип инт, която се нарича ИД примерно.|

salle.online.bg/sig
Отговор
в отговор на killall #12

Re: сложничка задачка

Е и аз затова не ти препоръчах да сложиш направо 5.0 при теб а да пуснеш трети сървър.

Ако искаш хубав аргумент за отказването от 4.0 ето ти един от мен. На 30-ти септември прекратихме активната поддръжка на 4.0 и я оставихме в т.нар. разширен период.

Повече детайли има на:

[линк]

salle.online.bg/sig
Отговор
в отговор на killall #13

Re: mysql compare

Да, с в.4 нищо по-добро не може да се направи, май.
Но много ме съмнява, че след като основната програма сега работи на 4, някой разумен човек ще се ъпгрейдва.

Така че остава друго: на java, php или каквото ти харесва да четеш двете таблици в масиви (подредени) и там с 1 цикъл да намериш каквото ти трябва.

Иначе имам подозрения, че същия алгоритъм може да стане и с курсори, които ги има в 5.

Отговор
в отговор на Йopдaн #14

Re: как си го представяш тая работа с масивите?

"В двете таблици има м/у 10 и 20 000 000"

Аз не бих натоварил в java или php два масива с по 10 000 000 - 20 000 000 елемента и да ги сравнявам всеки със всеки.

Не виждам как това ще ускори процеса кой знае колко.

salle.online.bg/sig
Отговор
в отговор на Йopдaн #15

Re: mysql compare

И що си мислиш, че "java, php или каквото ти харесва" ще прерови двадесетина милиона записа по-бързо от MySQL-а
Защото при този подход не може да се избяга от пълното преравяне на табл. А (че даже и на Б)
Затова и единствената възможност за ускоряване е ако може при изтриването да задейства по някакъв начин тригер, който да пълни търсената таблица с изтритите.
Ако не може да се приложи техниката, която предлага sale за задействане на тригери на MySQL, може да се опита да емулира тригера по програмен път, ако изтриването става от едно място, и ако може да пипа в тази процедура или да я замести със своя, която освен че изтрива и да пълни необходимата му таблица.
Е, най-елегантно е ако може да се ъпгредне до версия с тригери, а най-лесно е да се примири с минутите за обработка, пък така клиента може и да "почувства" ползата от ъпгрейд.

Отговор
в отговор на Йopдaн #16

Re: mysql compare

>salle (един такъв): Аз не бих натоварил в java или php два масива с по 10 000 000
Вярно, в java без това не може да има толкова големи масиви
>salle (един такъв): да ги сравнявам всеки със всеки
Както писах идеята е с 1 цикъл.
>NDeu (динозавър): най-елегантно е ако може да се ъпгредне до версия с тригери
Има друга (основна) програма, работеща на 4, кой ще гарантира как ще се държи на 5??

Сега да поясня какво имам предвид. Join-a на 2 таблици прави NxM операции (основно дискови, което е най-бавно), ако има индекси Nxlog(M), и накрая, ако М е малко сървъра може да кешира втората таблица, но случая не е такъв.

Ако има 2 подредени масива, може с 1 цикъл (N операции) да се сравнят елементите им. Проблема при java е, че не може да има толкова големи масиви. В С и Delphi предполагам, че може - това са 160 MB. Taka че трябва данните да се четат и обработват на порции. Това усложнява още малко алгоритъма, но не увеличава времето: всяка таблица се чете по 1 път и има 1 цикъл. Голяма е разликата между 1 цикъл и 2 вложени цикъла за големи N. И да повторя: Иначе имам подозрения, че същия алгоритъм може да стане и с курсори.


i=0;
j=0;
while(i<MAX && j<MAX) {
if(a>b[j])
j++;
else if(a<b[j]) {
while(a<b[j]) {
System.out.println("i="+i+" a="+a);
i++;
}
}
else {
i++;
j++;
}
}
for (;i<MAX;i++)
System.out.println("i="+i+" a="+a);
// Може и да съм объркал нещо, но това е идеята

Отговор
в отговор на Йopдaн #17

Re: mysql compare

a да се чете a [ i ]

Отговор
в отговор на Йopдaн #18

Re: mysql compare

Това при мен минава за около 30 сек.
// VC6

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

bool mysql_fetch(char *sql, int *&result, int &size) {
// ToDo: impl query + fetch
// currently stub impl
size = 10000000;
result = new int[size];
for(int i = 0; i < size; i++)
result[i ] = ((rand()<<16)+(unsigned)rand()) % 10000000;
// success
return true;
}

int compare_int(const void *a, const void *b) {
return *((int *)a) - *((int *)b);
}

void main() {
int *a, asize;
int *b, bsize;
int *c, csize;

if(mysql_fetch("SELECT id FROM A", a, asize)) {
if(mysql_fetch("SELECT id FROM B", b, bsize)) {
// impl MINUS
qsort(a, asize, sizeof *a, compare_int);
c = new int[bsize];
csize = 0;
for(int i; i < bsize; i++) {
if(!bsearch(&b[i ], a, asize, sizeof *a, compare_int)) {
c[csize++] = b[i ];
}
}
printf("csize = %d\n", csize);
printf("clock = %lg\n", double(clock()) / CLOCKS_PER_SEC);
}
}
}

cheers,
</wqw>


[линк]
Отговор
в отговор на killall #19

Re: mysql compare

на Гугъл му е през онази работа дали са статични или динамични страниците ... стига да може да ги достигне директно ;-)
АКо имаш възможност да пипаш по софта им по добре помисли или за mod_rewrite, или за нещо подобно на [линк]

Отговор
в отговор на killall #20

Re: mysql compare



mysql> show variables like 'ver%';
+-------------------------+---------------------+
| Variable_name | Value |
+-------------------------+---------------------+
| version | 4.1.14-log |
| version_comment | Source distribution |
| version_compile_machine | i486 |
| version_compile_os | slackware-linux-gnu |
+-------------------------+---------------------+
4 rows in set (0.03 sec)

----------------------------------------------------
----------------------------------------------------

mysql> create table b1 (id int unsigned auto_increment not null primary key);
mysql> create table b2 (id int unsigned auto_increment not null primary key);


--------------------------------------
--------------------------------------

mysql> select count(*) from b1;
+----------+
| count(*) |
+----------+
| 111005 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from b2;
+----------+
| count(*) |
+----------+
| 111003 |
+----------+
1 row in set (0.00 sec)

mysql> select b1.id from b1 left join b2 on b1.id=b2.id where b2.id is null;
+--------+
| id |
+--------+
| 111004 |
| 111005 |
+--------+
2 rows in set (0.68 sec)


----------------------------------------

mysql> select count(*) from b1;
+----------+
| count(*) |
+----------+
| 211005 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from b2;
+----------+
| count(*) |
+----------+
| 211003 |
+----------+
1 row in set (0.00 sec)

mysql> select b1.id from b1 left join b2 on b1.id=b2.id where b2.id is null;
+--------+
| id |
+--------+
| 211004 |
| 211005 |
+--------+
2 rows in set (1.32 sec)

-----------------------------------------

mysql> select count(*) from b1;
+----------+
| count(*) |
+----------+
| 311005 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from b2;
+----------+
| count(*) |
+----------+
| 311003 |
+----------+
1 row in set (0.00 sec)

mysql> select b1.id from b1 left join b2 on b1.id=b2.id where b2.id is null;
+--------+
| id |
+--------+
| 311004 |
| 311005 |
+--------+
2 rows in set (1.75 sec)

-----------------------------------------

mysql> select count(*) from b1;
+----------+
| count(*) |
+----------+
| 611005 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from b2;
+----------+
| count(*) |
+----------+
| 611003 |
+----------+
1 row in set (0.00 sec)

mysql> select b1.id from b1 left join b2 on b1.id=b2.id where b2.id is null;
+--------+
| id |
+--------+
| 611004 |
| 611005 |
+--------+
2 rows in set (2.37 sec)

-----------------------------------------

mysql> select count(*) from b1;
+----------+
| count(*) |
+----------+
| 1011005 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from b2;
+----------+
| count(*) |
+----------+
| 1011003 |
+----------+
1 row in set (0.00 sec)

mysql> select b1.id from b1 left join b2 on b1.id=b2.id where b2.id is null;
+---------+
| id |
+---------+
| 1011004 |
| 1011005 |
+---------+
2 rows in set (4.80 sec)

----------------------------------------

mysql> select count(*) from b1;
+----------+
| count(*) |
+----------+
| 1511005 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from b2;
+----------+
| count(*) |
+----------+
| 1511003 |
+----------+
1 row in set (0.00 sec)

mysql> select b1.id from b1 left join b2 on b1.id=b2.id where b2.id is null;
+---------+
| id |
+---------+
| 1511004 |
| 1511005 |
+---------+
2 rows in set (6.22 sec)

-----------------------------------------

mysql> select count(*) from b1;
+----------+
| count(*) |
+----------+
| 2011005 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from b2;
+----------+
| count(*) |
+----------+
| 2011003 |
+----------+
1 row in set (0.00 sec)

mysql> select b1.id from b1 left join b2 on b1.id=b2.id where b2.id is null;
+---------+
| id |
+---------+
| 2011004 |
| 2011005 |
+---------+
2 rows in set (8.45 sec)

-----------------------------------------

mysql> select count(*) from b1;
+----------+
| count(*) |
+----------+
| 5011007 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from b2;
+----------+
| count(*) |
+----------+
| 5011005 |
+----------+
1 row in set (0.00 sec)

mysql> select b1.id from b1 left join b2 on b1.id=b2.id where b2.id is null;
+---------+
| id |
+---------+
| 5011006 |
| 5011007 |
+---------+
2 rows in set (19.13 sec)

------------------------------------------

mysql> select count(*) from b1;
+----------+
| count(*) |
+----------+
| 10011007 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from b2;
+----------+
| count(*) |
+----------+
| 10011005 |
+----------+
1 row in set (0.00 sec)

mysql> select b1.id from b1 left join b2 on b1.id=b2.id where b2.id is null;
+----------+
| id |
+----------+
| 10011006 |
| 10011007 |
+----------+
2 rows in set (38.02 sec)

-----------------------------------------

mysql> select count(*) from b1;
+----------+
| count(*) |
+----------+
| 15011007 |
+----------+
1 row in set (0.00 sec)

mysql>
mysql> select count(*) from b2;
+----------+
| count(*) |
+----------+
| 15011005 |
+----------+
1 row in set (0.00 sec)

mysql> select b1.id from b1 left join b2 on b1.id=b2.id where b2.id is null;
+----------+
| id |
+----------+
| 15011006 |
| 15011007 |
+----------+
2 rows in set (57.65 sec)

------------------------------------------

mysql> select count(*) from b1;
+----------+
| count(*) |
+----------+
| 21011007 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from b2;
+----------+
| count(*) |
+----------+
| 21011005 |
+----------+
1 row in set (0.00 sec)

mysql> select b1.id from b1 left join b2 on b1.id=b2.id where b2.id is null;
+----------+
| id |
+----------+
| 21011006 |
| 21011007 |
+----------+
2 rows in set (1 min 21.12 sec)

------------------------------------------
------------------------------------------

след "случайно" изтрити 1000 записа от b2:
---------------------------

mysql> select count(*) from b1;
+----------+
| count(*) |
+----------+
| 21011007 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from b2;
+----------+
| count(*) |
+----------+
| 21010005 |
+----------+
1 row in set (0.00 sec)

mysql> select b1.id from b1 left join b2 on b1.id=b2.id where b2.id is null;
+----------+
| id |
+----------+
| 89046 |
| 121645 |
| 125820 |
| 174744 |
| 189908 |
| 205751 |
| 211481 |
| 230507 |
| 247192 |
| 272935 |
| 291308 |
| 305244 |
| 305869 |
| 307257 |
| 359781 |
| 377791 |
| 390821 |
| 399122 |
| 402593 |
| 426291 |
| 431694 |
| 442484 |
| 467564 |
| 486856 |
| 528279 |
| 538972 |
| 603172 |
| 603556 |
| 646472 |
| 659479 |
| 667880 |
| 670134 |
| 697968 |
| 721373 |
| 737809 |
| 787780 |
| 798577 |
| 806680 |
| 807880 |
| 809182 |
| 809265 |
| 853056 |
| 864828 |
| 972707 |
| 986611 |
| 1046702 |
| 1048623 |
| 1060510 |
| 1073370 |
| 1074326 |
| 1149064 |
| 1164623 |
| 1169495 |
| 1173774 |
| 1225416 |
| 1245234 |
| 1273360 |
| 1285645 |
| 1303972 |
| 1304623 |
| 1328686 |
| 1342788 |
| 1351276 |
| 1376249 |
| 1421995 |
| 1423019 |
| 1433590 |
| 1483248 |
| 1492665 |
| 1493512 |
| 1495420 |
| 1535224 |
| 1570691 |
| 1632427 |
| 1686785 |
| 1695226 |
| 1736202 |
| 1758586 |
| 1761485 |
| 1765289 |
| 1768842 |
| 1780867 |
| 1816849 |
| 1817651 |
| 1851816 |
| 1886079 |
| 1888935 |
| 1894876 |
| 1925209 |
| 1945232 |
| 1974106 |
| 1988424 |
| 1998351 |
| 2003996 |
| 2024542 |
| 2095904 |
| 2134837 |
| 2148648 |
| 2163313 |
| 2201499 |
| 2227473 |
| 2228032 |
| 2234202 |
| 2238362 |
| 2239512 |
| 2252825 |
| 2255604 |
| 2312729 |
| 2351401 |
| 2360694 |
| 2369207 |
| 2391662 |
| 2394270 |
| 2421777 |
| 2441723 |
| 2447007 |
| 2455686 |
| 2470159 |
| 2476624 |
| 2491326 |
| 2500052 |
| 2508904 |
| 2516562 |
| 2516602 |
| 2541421 |
| 2542597 |
| 2576692 |
| 2587229 |
| 2610304 |
| 2629121 |
| 2630430 |
| 2632840 |
| 2662297 |
| 2663880 |
| 2673909 |
| 2690631 |
| 2693960 |
| 2694527 |
| 2700661 |
| 2722951 |
| 2771115 |
| 2773732 |
| 2798136 |
| 2838270 |
| 2859161 |
| 2893357 |
| 2905170 |
| 2915123 |
| 2923690 |
| 2932615 |
| 2946381 |
| 2991535 |
| 2998579 |
| 3037395 |
| 3040381 |
| 3045603 |
| 3103073 |
| 3109638 |
| 3113593 |
| 3140150 |
| 3142165 |
| 3166482 |
| 3182329 |
| 3186822 |
| 3213161 |
| 3215915 |
| 3220947 |
| 3286215 |
| 3301116 |
| 3304343 |
| 3316149 |
| 3334390 |
| 3341150 |
| 3373355 |
| 3412994 |
| 3423909 |
| 3454490 |
| 3537552 |
| 3539448 |
| 3562015 |
| 3581151 |
| 3596995 |
| 3632683 |
| 3641429 |
| 3656044 |
| 3702904 |
| 3730476 |
| 3744959 |
| 3816102 |
| 3825492 |
| 3838951 |
| 3859611 |
| 3876434 |
| 3880558 |
| 3885253 |
| 3891164 |
| 3898298 |
| 3920868 |
| 3947894 |
| 3950971 |
| 3951114 |
| 3957005 |
| 3957938 |
| 3969793 |
| 4014653 |
| 4022536 |
| 4086309 |
| 4087449 |
| 4104042 |
| 4136424 |
| 4144173 |
| 4233601 |
| 4294191 |
| 4324803 |
| 4342796 |
| 4354213 |
| 4355421 |
| 4413357 |
| 4427733 |
| 4461392 |
| 4510051 |
| 4577973 |
| 4583800 |
| 4590402 |
| 4614844 |
| 4622642 |
| 4642412 |
| 4687511 |
| 4702863 |
| 4712585 |
| 4730204 |
| 4752356 |
| 4858884 |
| 4863151 |
| 4875726 |
| 4883131 |
| 4887683 |
| 4897568 |
| 4898009 |
| 4934648 |
| 4972697 |
| 4975777 |
| 5017755 |
| 5030865 |
| 5040729 |
| 5100598 |
| 5103064 |
| 5129288 |
| 5146157 |
| 5200585 |
| 5214046 |
| 5216482 |
| 5230872 |
| 5267801 |
| 5308168 |
| 5336539 |
| 5343265 |
| 5360856 |
| 5374533 |
| 5403183 |
| 5404045 |
| 5418520 |
| 5467564 |
| 5534132 |
| 5535356 |
| 5556507 |
| 5577981 |
| 5584877 |
| 5613724 |
| 5626109 |
| 5641849 |
| 5647469 |
| 5672752 |
| 5686708 |
| 5704770 |
| 5728379 |
| 5729346 |
| 5745485 |
| 5751296 |
| 5771276 |
| 5818896 |
| 5886194 |
| 5895576 |
| 5938038 |
| 5954411 |
| 6007255 |
| 6023290 |
| 6036804 |
| 6061746 |
| 6064512 |
| 6064893 |
| 6077933 |
| 6081793 |
| 6097714 |
| 6123211 |
| 6152130 |
| 6175108 |
| 6209245 |
| 6249031 |
| 6262670 |
| 6291732 |
| 6293990 |
| 6311434 |
| 6316231 |
| 6391733 |
| 6399984 |
| 6404255 |
| 6447858 |
| 6478676 |
| 6481428 |
| 6503449 |
| 6514003 |
| 6532724 |
| 6552307 |
| 6566123 |
| 6574159 |
| 6655921 |
| 6704684 |
| 6706202 |
| 6738536 |
| 6779834 |
| 6819434 |
| 6827792 |
| 6862110 |
| 6876347 |
| 6892676 |
| 6933229 |
| 6956594 |
| 6989533 |
| 7007247 |
| 7087916 |
| 7114722 |
| 7133802 |
| 7193063 |
| 7194333 |
| 7218043 |
| 7225160 |
| 7231916 |
| 7254525 |
| 7254615 |
| 7266131 |
| 7270580 |
| 7271957 |
| 7274403 |
| 7289033 |
| 7319223 |
| 7332728 |
| 7354218 |
| 7368668 |
| 7371824 |
| 7375154 |
| 7403280 |
| 7421520 |
| 7458699 |
| 7467103 |
| 7480078 |
| 7481013 |
| 7496638 |
| 7520439 |
| 7534176 |
| 7550949 |
| 7575713 |
| 7636580 |
| 7664916 |
| 7680098 |
| 7687132 |
| 7702836 |
| 7752967 |
| 7782574 |
| 7793297 |
| 7813461 |
| 7821599 |
| 7870006 |
| 7896050 |
| 7896478 |
| 7920119 |
| 7956528 |
| 7973466 |
| 7991287 |
| 8029764 |
| 8046929 |
| 8072454 |
| 8082555 |
| 8092633 |
| 8108578 |
| 8116548 |
| 8118912 |
| 8129861 |
| 8144737 |
| 8161570 |
| 8194822 |
| 8240550 |
| 8252632 |
| 8258787 |
| 8270701 |
| 8279826 |
| 8305384 |
| 8423765 |
| 8428743 |
| 8458531 |
| 8483717 |
| 8484949 |
| 8517972 |
| 8521337 |
| 8543344 |
| 8564934 |
| 8578225 |
| 8634287 |
| 8652119 |
| 8686399 |
| 8691828 |
| 8719850 |
| 8779174 |
| 8808905 |
| 8826436 |
| 8834317 |
| 8835578 |
| 8836444 |
| 8855082 |
| 8855729 |
| 8861030 |
| 8878156 |
| 8900827 |
| 8925227 |
| 8946271 |
| 9047080 |
| 9054713 |
| 9057603 |
| 9068093 |
| 9089938 |
| 9126220 |
| 9151553 |
| 9191432 |
| 9221433 |
| 9243786 |
| 9263371 |
| 9263567 |
| 9277793 |
| 9280809 |
| 9286408 |
| 9300287 |
| 9300369 |
| 9302506 |
| 9318070 |
| 9324283 |
| 9326703 |
| 9328964 |
| 9347991 |
| 9352569 |
| 9402057 |
| 9499116 |
| 9512166 |
| 9523383 |
| 9531014 |
| 9545735 |
| 9552741 |
| 9581600 |
| 9602627 |
| 9613336 |
| 9619073 |
| 9619697 |
| 9628378 |
| 9632565 |
| 9662586 |
| 9669688 |
| 9693850 |
| 9701785 |
| 9721817 |
| 9740832 |
| 9757429 |
| 9766572 |
| 9772390 |
| 9786333 |
| 9787708 |
| 9794865 |
| 9833389 |
| 9847273 |
| 9884057 |
| 9884201 |
| 9890922 |
| 9908544 |
| 9922000 |
| 9949843 |
| 9951190 |
| 9956490 |
| 10042275 |
| 10050312 |
| 10070891 |
| 10082311 |
| 10112663 |
| 10124083 |
| 10134304 |
| 10153258 |
| 10169198 |
| 10199501 |
| 10266716 |
| 10284964 |
| 10306657 |
| 10346202 |
| 10350955 |
| 10397963 |
| 10408856 |
| 10411919 |
| 10429025 |
| 10429277 |
| 10436823 |
| 10482508 |
| 10501715 |
| 10510621 |
| 10512029 |
| 10522065 |
| 10532356 |
| 10555852 |
| 10563438 |
| 10572383 |
| 10575867 |
| 10577986 |
| 10580550 |
| 10596380 |
| 10630834 |
| 10653285 |
| 10680761 |
| 10682779 |
| 10682991 |
| 10715297 |
| 10759677 |
| 10811791 |
| 10827780 |
| 10832013 |
| 10837731 |
| 10838387 |
| 10839642 |
| 10862818 |
| 10864766 |
| 10876124 |
| 10876767 |
| 10899569 |
| 10955859 |
| 10972069 |
| 10977491 |
| 10979243 |
| 11047584 |
| 11067275 |
| 11148959 |
| 11157545 |
| 11177099 |
| 11181032 |
| 11197381 |
| 11253284 |
| 11266828 |
| 11266966 |
| 11302116 |
| 11327066 |
| 11420943 |
| 11424474 |
| 11425280 |
| 11472429 |
| 11477300 |
| 11562646 |
| 11590720 |
| 11613377 |
| 11615519 |
| 11631830 |
| 11650731 |
| 11666716 |
| 11682290 |
| 11685966 |
| 11708034 |
| 11710158 |
| 11719139 |
| 11748454 |
| 11800441 |
| 11843698 |
| 11845567 |
| 11917841 |
| 11933686 |
| 11962272 |
| 12007449 |
| 12035184 |
| 12072959 |
| 12075125 |
| 12125316 |
| 12130132 |
| 12264763 |
| 12286386 |
| 12294505 |
| 12311926 |
| 12384724 |
| 12385240 |
| 12389303 |
| 12402111 |
| 12417908 |
| 12424702 |
| 12478688 |
| 12505027 |
| 12543004 |
| 12544841 |
| 12548410 |
| 12561763 |
| 12585259 |
| 12606407 |
| 12635905 |
| 12636319 |
| 12648406 |
| 12665291 |
| 12669315 |
| 12694663 |
| 12700043 |
| 12717446 |
| 12733290 |
| 12758903 |
| 12759204 |
| 12785634 |
| 12811064 |
| 12821356 |
| 12826507 |
| 12923197 |
| 12940485 |
| 12960874 |
| 12975184 |
| 12998675 |
| 13056080 |
| 13061655 |
| 13066823 |
| 13089666 |
| 13114981 |
| 13128359 |
| 13133338 |
| 13140805 |
| 13145380 |
| 13154678 |
| 13162958 |
| 13186315 |
| 13231285 |
| 13243725 |
| 13257374 |
| 13257412 |
| 13257966 |
| 13280850 |
| 13294714 |
| 13294743 |
| 13296931 |
| 13316384 |
| 13349489 |
| 13361544 |
| 13369780 |
| 13435898 |
| 13459899 |
| 13480713 |
| 13480939 |
| 13488588 |
| 13548969 |
| 13557161 |
| 13607267 |
| 13616386 |
| 13638134 |
| 13648787 |
| 13673350 |
| 13677103 |
| 13687981 |
| 13690670 |
| 13731531 |
| 13759132 |
| 13759852 |
| 13789730 |
| 13799133 |
| 13804354 |
| 13806165 |
| 13817940 |
| 13858385 |
| 13876967 |
| 13880997 |
| 13893296 |
| 13914241 |
| 13914941 |
| 13952659 |
| 13960288 |
| 13979354 |
| 13979818 |
| 14004467 |
| 14022589 |
| 14035296 |
| 14052758 |
| 14059659 |
| 14067110 |
| 14096188 |
| 14097337 |
| 14102858 |
| 14111196 |
| 14130369 |
| 14153566 |
| 14159636 |
| 14195153 |
| 14207672 |
| 14214073 |
| 14234395 |
| 14237366 |
| 14250281 |
| 14305236 |
| 14316735 |
| 14321619 |
| 14337311 |
| 14384955 |
| 14422331 |
| 14427739 |
| 14455022 |
| 14461265 |
| 14469491 |
| 14469661 |
| 14484453 |
| 14531186 |
| 14540714 |
| 14543767 |
| 14548943 |
| 14588359 |
| 14623992 |
| 14699959 |
| 14720112 |
| 14725746 |
| 14764103 |
| 14794852 |
| 14813966 |
| 14821169 |
| 14828844 |
| 14843686 |
| 14882202 |
| 14909328 |
| 14909706 |
| 14947058 |
| 14972683 |
| 15041471 |
| 15054717 |
| 15070044 |
| 15091507 |
| 15103337 |
| 15110693 |
| 15131265 |
| 15143798 |
| 15146499 |
| 15187370 |
| 15191807 |
| 15282910 |
| 15326662 |
| 15383592 |
| 15399802 |
| 15441495 |
| 15450368 |
| 15475223 |
| 15496134 |
| 15519207 |
| 15571561 |
| 15664102 |
| 15674779 |
| 15688985 |
| 15747985 |
| 15751556 |
| 15780187 |
| 15826229 |
| 15866572 |
| 15875584 |
| 15913690 |
| 15920495 |
| 15924689 |
| 15940925 |
| 15966958 |
| 15973615 |
| 15978559 |
| 15979056 |
| 15980314 |
| 15985673 |
| 16013204 |
| 16031046 |
| 16035335 |
| 16045634 |
| 16047136 |
| 16056022 |
| 16059982 |
| 16065240 |
| 16090395 |
| 16117083 |
| 16148051 |
| 16153213 |
| 16163722 |
| 16190485 |
| 16284152 |
| 16328134 |
| 16331343 |
| 16341204 |
| 16355066 |
| 16379998 |
| 16409305 |
| 16411905 |
| 16416099 |
| 16420357 |
| 16422592 |
| 16435733 |
| 16442120 |
| 16461401 |
| 16521377 |
| 16564615 |
| 16606644 |
| 16608768 |
| 16610289 |
| 16645006 |
| 16682933 |
| 16705644 |
| 16723251 |
| 16725602 |
| 16736480 |
| 16736749 |
| 16749829 |
| 16752547 |
| 16766202 |
| 16777837 |
| 16812761 |
| 16928345 |
| 16949573 |
| 16963469 |
| 16964117 |
| 16974201 |
| 16980021 |
| 16994425 |
| 17007608 |
| 17009507 |
| 17097692 |
| 17103852 |
| 17129203 |
| 17144314 |
| 17153161 |
| 17164932 |
| 17165749 |
| 17175191 |
| 17262269 |
| 17334574 |
| 17341347 |
| 17351109 |
| 17363421 |
| 17382772 |
| 17396994 |
| 17401051 |
| 17426120 |
| 17433217 |
| 17470082 |
| 17494027 |
| 17509378 |
| 17520011 |
| 17525405 |
| 17552087 |
| 17573997 |
| 17578516 |
| 17643425 |
| 17648219 |
| 17652383 |
| 17660741 |
| 17691618 |
| 17703681 |
| 17713527 |
| 17741337 |
| 17764527 |
| 17780208 |
| 17785236 |
| 17803761 |
| 17806105 |
| 17808778 |
| 17813896 |
| 17849100 |
| 17862135 |
| 17883005 |
| 17891335 |
| 17989546 |
| 17995889 |
| 18032285 |
| 18039008 |
| 18055751 |
| 18062145 |
| 18066727 |
| 18101747 |
| 18153092 |
| 18158235 |
| 18171012 |
| 18181621 |
| 18192312 |
| 18211831 |
| 18229146 |
| 18237172 |
| 18237411 |
| 18267065 |
| 18326691 |
| 18353012 |
| 18355696 |
| 18401548 |
| 18431624 |
| 18499809 |
| 18553186 |
| 18570479 |
| 18577800 |
| 18580254 |
| 18635673 |
| 18649113 |
| 18655268 |
| 18734716 |
| 18775733 |
| 18791306 |
| 18896891 |
| 18901926 |
| 19005478 |
| 19015616 |
| 19047176 |
| 19087256 |
| 19146607 |
| 19201675 |
| 19207380 |
| 19209326 |
| 19210274 |
| 19211944 |
| 19235882 |
| 19278113 |
| 19314335 |
| 19325216 |
| 19331849 |
| 19354197 |
| 19360980 |
| 19365530 |
| 19371474 |
| 19396551 |
| 19398094 |
| 19451313 |
| 19463751 |
| 19494993 |
| 19508002 |
| 19550860 |
| 19555657 |
| 19574136 |
| 19606019 |
| 19610565 |
| 19613776 |
| 19629884 |
| 19638813 |
| 19651937 |
| 19663697 |
| 19678630 |
| 19695781 |
| 19737821 |
| 19741328 |
| 19777042 |
| 19825717 |
| 19840267 |
| 19846501 |
| 19887032 |
| 19930912 |
| 19932498 |
| 19942013 |
| 19962249 |
| 20024094 |
| 20097911 |
| 20118592 |
| 20121003 |
| 20121413 |
| 20134401 |
| 20165953 |
| 20168860 |
| 20176377 |
| 20182148 |
| 20272900 |
| 20277934 |
| 20326531 |
| 20340419 |
| 20393750 |
| 20411914 |
| 20417969 |
| 20435517 |
| 20451231 |
| 20476607 |
| 20485535 |
| 20497507 |
| 20499622 |
| 20567116 |
| 20588342 |
| 20620216 |
| 20625011 |
| 20626552 |
| 20627471 |
| 20634994 |
| 20665919 |
| 20670866 |
| 20680768 |
| 20735682 |
| 20741394 |
| 20742269 |
| 20763654 |
| 20779379 |
| 20825967 |
| 20854609 |
| 20930409 |
| 20949108 |
| 20961157 |
| 20963698 |
| 20964227 |
| 20974782 |
| 20984575 |
| 21011006 |
| 21011007 |
+----------+
1002 rows in set (1 min 21.47 sec)

.


не е лесно да бъдеш злодей-психопат! иска се толкова много работа...
Отговор