Jump to content
Sign in to follow this  
sharman35

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

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)


 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

 

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

Share this post


Link to post
Share on other sites

(1.5 или 2.0).
зачем?

Share this post


Link to post
Share on other sites

зачем?

 

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

ocStore © Версия 1.5.5.1.2

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

Share this post


Link to post
Share on other sites

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

 

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

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

 

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

 

DISTINCT * 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

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

 

И?????

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

 

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

[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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites
[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

Share this post


Link to post
Share on other sites
[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  не панацея 

Share this post


Link to post
Share on other sites

[Duration] => 0.02308625

[Duration] => 0.04949400

 

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

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

Share this post


Link to post
Share on other sites

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


Share this post


Link to post
Share on other sites
[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

Share this post


Link to post
Share on other sites

[Duration] => 0.02308625

[Duration] => 0.04949400

 

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

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

 

 

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

 

Share this post


Link to post
Share on other sites

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

 

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.