Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Помогите разобраться с логом Mysql


sharman35

Recommended Posts

Приветствую единомышленников по opencart!
Столкнулся с проблемой долгой загрузки магазина, неделю рыскаю по интернету в поисках хоть какой то информации об этом. Под спойлером. Помогите пожалуйста с этим разобраться!
При много благодарен!
 

133 Query SELECT * FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) LEFT JOIN oc_category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id = '503' AND cd.language_id = '1' AND c2s.store_id = '0' AND c.status = '1' ORDER BY c.sort_order, LCASE(cd.name)
133 Query SELECT * FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) LEFT JOIN oc_category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id = '199' AND cd.language_id = '1' AND c2s.store_id = '0' AND c.status = '1' ORDER BY c.sort_order, LCASE(cd.name)
133 Query SELECT * FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) LEFT JOIN oc_category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id = '405' AND cd.language_id = '1' AND c2s.store_id = '0' AND c.status = '1' ORDER BY c.sort_order, LCASE(cd.name)
133 Query SELECT * FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) LEFT JOIN oc_category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id = '763' AND cd.language_id = '1' AND c2s.store_id = '0' AND c.status = '1' ORDER BY c.sort_order, LCASE(cd.name)
133 Query SELECT * FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) LEFT JOIN oc_category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id = '511' AND cd.language_id = '1' AND c2s.store_id = '0' AND c.status = '1' ORDER BY c.sort_order, LCASE(cd.name)
133 Query SELECT * FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) LEFT JOIN oc_category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id = '515' AND cd.language_id = '1' AND c2s.store_id = '0' AND c.status = '1' ORDER BY c.sort_order, LCASE(cd.name)
133 Query SELECT * FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) LEFT JOIN oc_category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id = '407' AND cd.language_id = '1' AND c2s.store_id = '0' AND c.status = '1' ORDER BY c.sort_order, LCASE(cd.name)
133 Query SELECT * FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) LEFT JOIN oc_category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id = '408' AND cd.language_id = '1' AND c2s.store_id = '0' AND c.status = '1' ORDER BY c.sort_order, LCASE(cd.name)
133 Query SELECT * FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) LEFT JOIN oc_category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id = '376' AND cd.language_id = '1' AND c2s.store_id = '0' AND c.status = '1' ORDER BY c.sort_order, LCASE(cd.name)
133 Query SELECT * FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) LEFT JOIN oc_category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id = '409' AND cd.language_id = '1' AND c2s.store_id = '0' AND c.status = '1' ORDER BY c.sort_order, LCASE(cd.name)
133 Query SELECT * FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) LEFT JOIN oc_category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id = '163' AND cd.language_id = '1' AND c2s.store_id = '0' AND c.status = '1' ORDER BY c.sort_order, LCASE(cd.name)


 

Надіслати
Поділитися на інших сайтах


Столкнулся с проблемой долгой загрузки магазина, неделю рыскаю по интернету в поисках хоть какой то информации об этом. Под спойлером. Помогите пожалуйста с этим разобраться!

 

 

Уточните, пожалуйста, версию движка (1.5 или 2.0).

Надіслати
Поділитися на інших сайтах

зачем?

 

Проблема наверняка не только в этих запросах, так что, наверное, надо будет дать человеку дополнительную информацию по теме.

Надіслати
Поділитися на інших сайтах

Что конкретно Вы хотите услышать по этих запросах ? 

 

Для начала отключите подсчет количества категорий 

Надіслати
Поділитися на інших сайтах

Что конкретно Вы хотите услышать по этих запросах ? 

 

Для начала отключите подсчет количества категорий 

Артем подскажите пожалуйста как это можно сделать. Количество товара отключено, а вот с категориями не могу разобраться.

Надіслати
Поділитися на інших сайтах


Артем подскажите пожалуйста как это можно сделать. Количество товара отключено, а вот с категориями не могу разобраться.

 

Полагаю, вам нужен код получения категорий с включенным кешированием. Вот он:

 

	public function getCategory($category_id)
	{
		$category_info = $this->cache->get((int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$category_id);
		
		if (FALSE === $category_info)
		{
			$query = $this->db->query("SELECT DISTINCT * FROM " . DB_PREFIX . "category c
			LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id)
			LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id)
			WHERE c.category_id = '" . (int)$category_id . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "'
			AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1'");
			
			$category_info = $query->row;
			
			$this->cache->set((int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$category_id, $category_info);
		}
		
		return $category_info;
	}
	
	
	public function getCategories($parent_id = 0)
	{
		$categories = $this->cache->get((int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$parent_id);
		
		if (FALSE === $categories)
		{
			$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category c
			LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id)
			LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id)
			WHERE c.parent_id = '" . (int)$parent_id . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "'
			AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "'  AND c.status = '1'
			ORDER BY c.sort_order, LCASE(cd.name)");
			
			$categories = $query->rows;
			
			$this->cache->set((int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$parent_id, $categories);
		}
		
		return $categories;
	}

 

Внимательно только проверяйте, т.к. я скопировал его из своего проекта.

Надіслати
Поділитися на інших сайтах

Ни хрена не знаю SQL

 

Но поясните мне

 

$query = $this->db->query("SELECT DISTINCT * FROM " . DB_PREFIX . "category c
            LEFT JOIN "
. DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id)
            LEFT JOIN "
. DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id)
            WHERE c.category_id = '"
. (int)$category_id . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "'
            AND c2s.store_id = '"
. (int)$this->config->get('config_store_id') . "' AND c.status = '1'");

 

К учебника обращаться никого не заставляю

Надіслати
Поділитися на інших сайтах

я немного поправлю 

 

DISTINCT * 

Надіслати
Поділитися на інших сайтах

Приведите реальные данные, когда этот запрос может вернуть больше одной строки.

 

category_id - автоинкремент, уникальный (primary)

Надіслати
Поділитися на інших сайтах

не Вам, не хорошо все запросы пулять через звездочку

Надіслати
Поділитися на інших сайтах

Ну, тут как бы нужно, раграничить метод выборки, модель

 

Реально здесь нужно 3-4 поля

А где-то все..

 

И?????

Писать light метод?

 

Мы не ищем легких путей.

 

зы.. Поговорим о конструкторе запросов? :)

Надіслати
Поділитися на інших сайтах

не, конструктор запросов это тема для холивара  :-)

Надіслати
Поділитися на інших сайтах

[Query_ID] => 1

[Duration] => 0.00009550

[Query] => SELECT DISTINCT * FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) LEFT JOIN oc_category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id

[Query_ID] => 1

[Duration] => 0.00009375

[Query] => SELECT * FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) LEFT JOIN oc_category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id

Надіслати
Поділитися на інших сайтах

@druzhkov, на хрена кешировать getCategory? чтоб засорить сотней файлов папку кеша?

 

и вообще кешировать нужно готовое дерево в контроллере

Надіслати
Поділитися на інших сайтах

[Query_ID] => 1
  [Duration] => 0.00009550
  [Query] => SELECT DISTINCT * FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) LEFT JOIN oc_category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id

[Query_ID] => 1
   [Duration] => 0.00009375
   [Query] => SELECT * FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) LEFT JOIN oc_category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id 

Я в курсе, что то тысячные... НО!!!

 

 

Для таких тестов используйте

 

select SQL_NO_CACHE

Надіслати
Поділитися на інших сайтах

[Query_ID] => 1
            [Duration] => 0.02308625
            [Query] => SELECT SQL_NO_CACHE * FROM

[Query_ID] => 1
            [Duration] => 0.04949400
            [Query] => SELECT SQL_NO_CACHE DISTINCT *

DISTINCT  не панацея 

Надіслати
Поділитися на інших сайтах

[Duration] => 0.02308625

[Duration] => 0.04949400

 

Но тут разница в 2!!!! раза.

в данном запросе DISTINCT - зло!

Надіслати
Поділитися на інших сайтах

getCategory

[Duration] => max 0.00043825 - min 0.00036575
[Query] => SELECT SQL_NO_CACHE DISTINCT * FROM oc_category c 

[Duration] => max 0.00040175 - min 0.00039575
[Query] => SELECT SQL_NO_CACHE * FROM oc_category c


Надіслати
Поділитися на інших сайтах

[Duration] => 0.00031925
[Query] => SELECT SQL_NO_CACHE c.category_id, c.image, c.parent_id, c.top, c.column, cd.name, cd.meta_title, cd.meta_h1, cd.meta_description, ...

сам запрос 

SELECT SQL_NO_CACHE c.category_id, c.image, c.parent_id, c.top, c.column, cd.name, cd.meta_title, cd.meta_h1, cd.meta_description, cd.meta_keyword 
									FROM " . DB_PREFIX . "category c 
										LEFT JOIN " . DB_PREFIX . "category_description cd 
											ON (c.category_id = cd.category_id) 
										LEFT JOIN " . DB_PREFIX . "category_to_store c2s 
											ON (c.category_id = c2s.category_id) 

									WHERE c.category_id = '" . (int)$category_id . "' 
										AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "' 
										AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' 
										AND c.status = '1' 
									LIMIT 1

UPD а с кешом SQL так вовсе 0.00007700

Надіслати
Поділитися на інших сайтах

[Duration] => 0.02308625

[Duration] => 0.04949400

 

Но тут разница в 2!!!! раза.

в данном запросе DISTINCT - зло!

 

 

DISTINCT преобразовывается к GROUP BY для всех столбцов, для DISTINCT в сочетании с ORDER BY, помимо этого, во многих случаях также требуется временная таблица.

 

Надіслати
Поділитися на інших сайтах

@druzhkov, на хрена кешировать getCategory? чтоб засорить сотней файлов папку кеша?

 

и вообще кешировать нужно готовое дерево в контроллере

Да чего мелочиться - давайте кешировать готовые страницы. :-)

Это кусок из модифицированного мной кеша, там все раскладывается по папочкам, и совершенно не напрягает. К тому же все единообразно: на входе метода модели проверили кеш, далее запросили, на выходе сохранили.

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.