【发布时间】:2019-12-10 07:44:04
【问题描述】:
查询返回很慢。你知道应该做些什么来提高性能吗?谢谢
$where[] = "FIND_IN_SET(:pid, users.parents)";
$args['books'] = $this->query("SELECT books.*, users.user,
(SELECT COUNT(id) FROM {$this->prefix}books_best WHERE book_id = books.id) AS book_count,
(SELECT COUNT(id) FROM {$this->prefix}books_best WHERE book_id = books.id AND status > 1) AS result_count
FROM {$this->prefix}books AS books
INNER JOIN {$this->prefix}users AS users ON users.id = books.user_id
".(isset($_REQUEST['team']) && !empty($_REQUEST['team']) ? "
INNER JOIN {$this->prefix}books_best AS tcb ON tcb.book_id = books.id
INNER JOIN {$this->prefix}book_played AS tm ON tm.id = tcb.book_id AND (tm.home LIKE :team OR tm.away LIKE :team)
" : "")."
".(isset($_REQUEST['book_id']) && !empty($_REQUEST['book_id']) ? "
INNER JOIN {$this->prefix}books_best AS mcb ON mcb.book_id = books.id AND mcb.book_id = ".intval($_REQUEST['book_id'])."
" : "")."
".(count($array) > 0 ? "WHERE ".implode(" AND ", $where) : "")."
ORDER BY {$orders[$orderable['type']]} {$orderable['order']}
", $array, array('counter' => 'books.id', 'limit' => $_REQUEST['limit'] ?? 25));
$args['pagination'] = $this->pagination();
【问题讨论】:
-
使用必要的索引和外键来提高查询性能
-
发布服务器收到的实际查询可能会有用