Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 13:37 27.04.24 
Компютри и Интернет
   >> Бази данни
Всички теми Следваща тема *Кратък преглед

Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема Странно нещо с mysql  
Автор zipthis (непознат )
Публикувано24.03.09 19:52



Здравейте!
Имам MySQL версия 5.0.37. Създал съм си една таблица с продукти. Когато големината и набъбна (293000 записа) започнаха странни неща. При елементарен select * from products ORDER BY product_name ASC LIMIT 40000, 20
със съществуващ индекс по product_name заявката се изпълнява за 10 сек. Колкото първата стойност в LIMIT е по-голяма толкова по-бавно се изпълнява и обратно , колкото е по-малко толкова по-бързо. Ето я и структурата:
`product_id` int(11) NOT NULL auto_increment,
`vendor_id` int(11) NOT NULL default '0',
`product_parent_id` int(11) NOT NULL default '0',
`product_sku` varchar(64) NOT NULL default '',
`product_s_desc` varchar(255) default NULL,
`product_desc` text,
`product_thumb_image` varchar(255) default NULL,
`product_full_image` varchar(255) default NULL,
`product_publish` char(1) default NULL,
`product_weight` decimal(10,4) default NULL,
`product_weight_uom` varchar(32) default 'pounds.',
`product_length` decimal(10,4) default NULL,
`product_width` decimal(10,4) default NULL,
`product_height` decimal(10,4) default NULL,
`product_lwh_uom` varchar(32) default 'inches',
`product_url` varchar(255) default NULL,
`product_in_stock` int(11) NOT NULL default '0',
`product_available_date` int(11) default NULL,
`product_availability` varchar(56) NOT NULL default '',
`product_special` char(1) default NULL,
`product_discount_id` int(11) default NULL,
`ship_code_id` int(11) default NULL,
`cdate` int(11) default NULL,
`mdate` int(11) default NULL,
`product_name` varchar(64) default NULL,
`product_sales` int(11) NOT NULL default '0',
`attribute` varchar(200) default NULL,
`custom_attribute` varchar(200) NOT NULL,
`product_tax_id` tinyint(2) NOT NULL default '0',
`product_unit` varchar(32) default NULL,
`product_packaging` int(11) default NULL,
`child_options` varchar(45) default NULL,
`quantity_options` varchar(45) default NULL,
`child_option_ids` varchar(45) default NULL,
`product_order_levels` varchar(45) default NULL,
PRIMARY KEY (`product_id`),
KEY `idx_product_vendor_id` (`vendor_id`),
KEY `idx_product_product_parent_id` (`product_parent_id`),
KEY `idx_product_sku` (`product_sku`),
KEY `idx_product_ship_code_id` (`ship_code_id`),
KEY `idx_product_name` (`product_name`)
) ENGINE=MyISAM

Може ли някой да ми даде идея , защо може да се случва това?

П.С. На windows-ка машина инсталирах по-висока версия на mysql ефекта е същия





Тема Re: Странно нещо с mysqlнови [re: zipthis]  
Автор salle (един такъв)
Публикувано25.03.09 01:34



Все едно та питаш защо водата е мокра ....

Замисли се как би изпълнил такава заявка на ръка.

SELECT ... ORDER BY product_name ASC LIMIT 40000, 20

Трябва да вземеш всичките 293000 реда, да ги сортираш по product_name и чак когато подредиш първите 40020 реда си готов.

Би трябвало да е очевидно, че колкото по-рано спреш толкова по малко работа.

При LIMIT 100, 20 ще спреш обработката след 120 сортирани реда, при LIMIT 1000, 20 след 1020


Друг е въпроса, че таблицата ти плаче за Нормализация.



Тема Re: Странно нещо с mysqlнови [re: salle]  
Автор zipthis (непознат )
Публикувано25.03.09 09:47



Ами принципно си прав НО ако не се вземе в предвид че аз имам индекс по същото поле.Логично е ако аз изпълнявам тази заявка на ръка да си погледна индекса и да отброя 20 елемента от посочената в индекса позиция. Така няма да ми се налага да подредя и след това да отброя въпросните елементи. По отношение на нормализацията - да. Ще поработя по въпроса. Вълнува ме най-вече този проблем. Дай някаква идея ако имаш.

Редактирано от zipthis на 25.03.09 10:12.



Тема Re: Странно нещо с mysqlнови [re: salle]  
Автор zipthis (непознат )
Публикувано25.03.09 16:01



Между другото , времето на следната заявка също прогресивно се увеличава
Select * from products where product_sku=.......
където има индекс по product_sku
Спрях всички други конекции към сървъра за да не е допълнително натоварен . Направо съм узадъчен !



Тема Re: Странно нещо с mysqlнови [re: zipthis]  
Автор Dakota (erotoman)
Публикувано27.03.09 12:06



Колкото и да те озадачава това, фактът че има индекс, не означава автоматично, че той ще бъде използван или пък че непременно заявката ще стане по-бърза.

Затова, най-добре ни пусни изхода от: EXPLAIN SELECT * FROM products WHERE product_sku=...

"Договор, подписан с Русия, струва по-малко от хартията, върху която е написан!" - Бисмарк


Тема Re: Странно нещо с mysqlнови [re: zipthis]  
Автор salle (един такъв)
Публикувано29.03.09 06:48



"Логично е ако аз изпълнявам тази заявка на ръка да си погледна индекса и да отброя 20 елемента от посочената в индекса позиция."

А как ще стигнеш до въпросната позиция в индекса? Може би си представяш индексите като масиви, но те не са а са B-дървета. Това при положение, че индекса въобще се използва.

Както Dakota ти е писал по-добре провери с EXPLAIN дали е така.



Тема Re: Странно нещо с mysqlнови [re: Dakota]  
Автор zipthis (непознат )
Публикувано30.03.09 18:13



Първо мреси за корекцията :) "озадачава " Хахахаха. От бързане ......
А ето го и резултата.
mysql> explain select * from jos_vm_product ORDER BY product_name ASC LIMIT 40000, 20 ;
+----+-------------+----------------+-------+---------------+------------------+---------+------+--------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------------+-------+---------------+------------------+---------+------+--------+-------+
| 1 | SIMPLE | jos_vm_product | index | NULL | idx_product_name | 195 | NULL | 293109 | |
+----+-------------+----------------+-------+---------------+------------------+---------+------+--------+-------+
1 row in set (0.00 sec)

И щом при наличие на индекс той не го използва , как да стане? Дайте идея?

Редактирано от zipthis на 30.03.09 18:22.



Тема Re: Странно нещо с mysqlнови [re: zipthis]  
Автор salle (един такъв)
Публикувано02.04.09 16:13



Използва индекс



type=index
key=idx_product_name



Тема Re: Странно нещо с mysqlнови [re: salle]  
Автор zipthis (непознат )
Публикувано04.04.09 07:05



Използва се индекс, таблицата не е толкова голяма. Защо е толкова бавно? Бъдете малко по-полезни. Дайте идея.



Тема Re: Странно нещо с mysqlнови [re: zipthis]  
Автор salle (един такъв)
Публикувано04.04.09 09:54



Това сега е нова тема



"Защо е толкова бавно?"

А колко е бавно?

Първоначалният ти въпрос беше защо при по-голямо отместване времето за изпълнение е по-бавно на което вече ти отговорих.




Страници по тази тема: 1 | 2 | >> (покажи всички)
Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.