sharman35

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

Рекомендуемые сообщения

sharman35    5

Приветствую единомышленников по 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)


 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Otvet    405

Дерево категорий формируется

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
druzhkov    22

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

 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
druzhkov    22

зачем?

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
ArtemPitov    386

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
sharman35    5

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

ocStore © Версия 1.5.5.1.2

Чистый, без всяких сборок, натянут не стандартный шаблон.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
sharman35    5

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
druzhkov    22

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

 

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

 

	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;
	}

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
chukcha    933

Ни хрена не знаю 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'");

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
ArtemPitov    386

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

 

DISTINCT * 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
chukcha    933

Это что-то меняет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
chukcha    933

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
ArtemPitov    386

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
chukcha    933

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

 

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

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

 

И?????

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
ArtemPitov    386

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
ArtemPitov    386

[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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Otvet    405

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
chukcha    933
[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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
ArtemPitov    386
[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  не панацея 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
chukcha    933

[Duration] => 0.02308625

[Duration] => 0.04949400

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
ArtemPitov    386

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


Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
ArtemPitov    386
[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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
ArtemPitov    386

[Duration] => 0.02308625

[Duration] => 0.04949400

 

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

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

 

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
druzhkov    22

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

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу