Запросы к базе данных MySQL - скорость

0
  • вызов базы данных, который получает неограниченные записи (может быть 10 или 10.000), например:

    SELECT * FROM boo WHERE id = %d AND (approved = '1' OR (user = %d AND approved = '0'))

  • 2 вызова базы данных, которые получают ровно 10 записей, а другой - одну запись:

    SELECT * FROM boo WHERE id = %d AND approved = '1' LIMIT 10

    SELECT * FROM boo WHERE user = %d AND approved = '0'

Заметьте, что я не могу выполнить свой собственный db-запрос. Я могу использовать только набор функций, которые выполняют запросы выше...

какая опция более эффективна/быстрее?

Теги:
database

3 ответа

2
Лучший ответ

Это очень сложно ответить, но вот план, чтобы рассмотреть возможность повышения производительности:

  • Вы не указали, какие столбцы вы индексируете (если есть). Индексирование столбцов, которые вы хотите выбрать, и те, в которых вы используете условия, могут помочь вам получить лучшую производительность. Имейте в виду, что индексирование, помимо прочего, будет сопряжено с более тяжелыми расходами на запись. Если ваш общий случай для этих столбцов - поиск, я бы сказал, для индексации.

  • Убедитесь, что вы выбрали нужные столбцы, а не все. Это еще один фактор, который даст вам лучшую производительность.

  • Имейте в виду: каждый запрос имеет свои собственные накладные расходы. Добавление большего количества запросов будет сопряжено с большими затратами.

  • Имейте в виду: вам нужно на самом деле о средней производительности. Например, я вижу, что один из ваших запросов зависит от определенного пользователя. Спросите себя, кто эти пользователи, являются ли они случайными пользователями веб-сайтов, которые будут иметь пару записей, связанных с ними? или являются ли эти пользователи плотным сообществом, которые продолжают размещать сообщения и имеют много комментариев, связанных с ними? Эти вопросы помогут вам определить и приблизиться к количеству возвращаемых результатов (в среднем), и это должно использоваться для принятия правильного решения о том, с каким способом вы должны пойти.

Надеюсь, что это поможет!

1

Проверьте себя. Используйте EXPLAIN, вы можете получить обзор того, что происходит

1

Попробуй и посмотри?

Предполагая, что они находятся в огромной таблице с соответствующими индексами, это может быть самым быстрым:

SELECT * FROM boo WHERE id = %d AND approved = '1' LIMIT 10
UNION ALL
SELECT * FROM boo WHERE user = %d AND approved = '0'
  • 0
    извините, я обновил свой вопрос :) Я не могу сделать никаких пользовательских запросов :(

Ещё вопросы

Сообщество Overcoder
Наверх
Меню