Каков наилучший способ уменьшить sql запросы в моей ситуации - PullRequest
0 голосов
/ 23 июня 2009

Вот ситуация, на каждой странице будет отображаться 30 тем, поэтому я должен был выполнить не менее 1 SQL-оператора, кроме того, я также хочу показать, сколько ссылок на каждую тему и кто автор, таким образом Я должен использовать 30 операторов, чтобы подсчитать количество реплик, и использовать другие 30 операторов, чтобы найти автора. Наконец, я получил 61 оператор, я действительно беспокоюсь об эффективности.

Мои таблицы выглядят так:

Topic           Reply            User
-------       ----------       ------------
id            id               id
title         topic_id         username
...           ...              
author_id

Ответы [ 5 ]

2 голосов
/ 23 июня 2009

Если я правильно прочитал ваши требования, вам нужен результат следующего запроса:

SELECT Topic.title, User.username, COUNT(Reply.topic_id) Replies
FROM Topic, User, Reply
WHERE Topic.id = Reply.topic_id
AND Topic.author_id = User.id
GROUP BY Topic.title, User.username
2 голосов
/ 23 июня 2009

Вы должны посмотреть на присоединение таблиц во время запроса.

В качестве примера я мог бы сделать следующее:

SELECT reply.id, reply.authorid, reply.text, reply.topicid, 
       topic.title, 
       user.username 
FROM reply
  LEFT JOIN topic ON (topic.id = reply.topicid)
  LEFT JOIN user  ON (user.id = reply.authorid)
WHERE (reply.isactive = 1)
ORDER BY reply.postdate DESC
LIMIT 10
1 голос
/ 23 июня 2009

Одна вещь, которую нужно добавить поверх JOINS

Возможно, что ваши группы данных не совпадают или не связаны, поэтому JOIN не будут работать. Другой способ: у вас может быть 2 основных блока данных, к которым неудобно присоединяться.

Хранимые процедуры могут возвращать несколько наборов результатов.

Например, для сводной страницы можно вернуть один совокупный набор результатов и другой «последний 20» набор результатов в одном вызове SQL. Присоединиться к 2 неудобно, потому что они не «подходят» друг другу.

1 голос
/ 23 июня 2009

Когда я только начинал работать с веб-приложениями на основе баз данных, у меня были похожие проблемы. Затем я провел несколько лет, работая в среде с богатыми базами данных, где фактически изучал SQL. Если вы намереваетесь продолжить разработку веб-приложений (которые, как мне кажется, очень интересно создавать), стоит потратить время на то, чтобы взять книгу или ознакомиться с практическими рекомендациями по базовому и продвинутому SQL.

0 голосов
/ 23 июня 2009

Вы, конечно, можете использовать некоторые «левые объединения», однако, поскольку выходные данные изменяются только в случае обновления / добавления ваших таблиц, вы можете попытаться кэшировать его в текстовом файле xml /. Другой способ может заключаться в создании некоторой избыточности путем добавления еще одной строки в таблицу тем, в которой хранится количество ответов, имя пользователя и т. Д., И обновлять их только в случае изменений ...

...