"Олекотяване" на SQL заявка

DownFall

Registered
Здравейте. В стремежа си да направя сайта си да работи с възможно най-малко query-та и същевременно да не губи функционалност направих няколко заявки, които обаче установих, че бавят значително работата на сайта ми. Опитах сам да открия решение, но така и не можах, та за това отново прибягвам до туриста за помощ :) Та, на въпроса - някой може ли да ми предложи вариант, по който да "олекотя" заявка подобна на тази:

PHP:
		$q = sprintf
		(
			'SELECT
				`%1$s%2$s`.`t_id`,
				`%1$s%2$s`.`t_name`,
				`%1$s%2$s`.`t_description`,
				`%1$s%2$s`.`t_replies`,
				`%1$s%2$s`.`t_views`,
				`%1$s%2$s`.`t_author_id`,
				`%1$s%2$s`.`t_start_date`,
				`%1$s%2$s`.`t_last_post`,
				`%1$s%2$s`.`t_last_poster_id`,
				`%1$s%2$s`.`t_last_poster_name`,
				`%1$s%2$s`.`b_id`,
				`%1$s%2$s`.`t_approved`,
				`%1$s%2$s`.`t_closed`,
				`%1$s%2$s`.`t_pinned`,
				
				`%1$s%3$s`.`u_name`,
				
				`%1$s%4$s`.`b_name`
			FROM
				`%1$s%2$s`
			LEFT JOIN `%1$s%3$s` ON `%1$s%2$s`.`t_author_id` = `%1$s%3$s`.`u_id`
			LEFT JOIN `%1$s%4$s` ON `%1$s%2$s`.`b_id` = `%1$s%4$s`.`b_id`
			WHERE
					`%1$s%2$s`.`t_approved` = "1"
				AND
					`%1$s%2$s`.`b_id` = :b_id
			ORDER BY
				`%1$s%2$s`.`t_pinned` DESC,
				`%1$s%2$s`.`t_start_date` DESC,
				`%1$s%2$s`.`t_last_post` DESC
			LIMIT %5$d, %6$d', $this -> config['MySQL']['prefix'], 'topics', 'members', 'boards', $this -> pagination['offset'], $this -> config['ResultsPerPage']
		);

		$Results = $this -> db_query($q, array('b_id' => $b_id), 'all');

Благодаря предварително.
 
Може да използваш така наречените Nested Queries, но не мисля че ще подобриш значително производителността.

Ако ти се занимава може да направиш тестове, за да прецениш кое те устройва.
 
Сложи индекси. Примерно по тази заявка може да сложиш един индекс с 2 полета - (`b_id`, `t_approved`)

Значително ще ускори търсенето
 

Back
Горе