LINUX.ORG.RU
ФорумAdmin

Чем postgresql лучше mysql?


0

0

Мои цели: имеется маленький аукциончик на <~1000 товаров. Надо сортировать по выражению, которое лазеет в foreignkey'и. Кто быстрее это сделает? И чем одна БД лучше другой по другим параметрам?

Перемещено Dimez из Desktop

★★★★★

oops. Перенесите в admin plz

michwill ★★★★★
() автор топика

> Мои цели: имеется маленький аукциончик на <~1000 товаров. Надо сортировать по выражению, которое лазеет в foreignkey'и. Кто быстрее это сделает? И чем одна БД лучше другой по другим параметрам?

Запрос покажи. Вообще если ты на базу в 1000 товаров Foreign key'и заводишь, тебе наверно Postgres по стилю будет ближе.

gods-little-toy ★★★
()
Ответ на: комментарий от gods-little-toy

Если что, то за меня все делает джанговская ORM

michwill ★★★★★
() автор топика
Ответ на: комментарий от gods-little-toy

    # Выбираем то, что заказывалось
    objects = Lot.objects.extra(where=('(SELECT COUNT(*) FROM sell_propose WHERE sell_propose.lot_id = sell_lot.id)>0',))
    # Добавляем свойство mine, которое ознчает, что наша ставка самая высокая и сортируем
    # также, добавим автосвойство, что товар уже не продается
    objects = objects.extra(select={'mine': 'SELECT COUNT(*)>0 FROM sell_propose WHERE (sell_lot.id = sell_propose.lot_id) AND (sell_lot.price = sell_propose.price) AND (sell_propose.person_id = "%s")' % request.user.id,
        'finished': 'sold OR (end_date<\'%s\')' % str(datetime.datetime.now())},
        order_by=("-mine", "finished", "end_date", "name"))

Вид запроса, который генерит джанга:
SELECT (sold OR (end_date<'2008-06-01 00:22:11.343307')) AS
`finished`, (SELECT COUNT(*)>0 FROM sell_propose WHERE (sell_lot.id =
sell_propose.lot_id) AND (sell_lot.price = sell_propose.price) AND
(sell_propose.person_id = "1")) AS `mine`, `sell_lot`.`id`,
`sell_lot`.`name`, `sell_lot`.`description`, `sell_lot`.`photo`,
`sell_lot`.`start_price`, `sell_lot`.`price`, `sell_lot`.`sold`,
`sell_lot`.`draft`, `sell_lot`.`author_id`, `sell_lot`.`start_date`,
`sell_lot`.`end_date`, `sell_lot`.`slug` FROM `sell_lot` WHERE
(SELECT COUNT(*) FROM sell_propose WHERE sell_propose.lot_id =
sell_lot.id)>0 ORDER BY mine DESC, finished ASC,
`sell_lot`.`end_date` ASC, `sell_lot`.`name` ASC

michwill ★★★★★
() автор топика
Ответ на: комментарий от michwill

Ты б запрос хоть отформатировал что ли, глаза сломать можно.

Ок как я понимаю индекса у тебя подходящего нету.

C одной стороны тут подзапросы - место в MySQL традиционно слабое (хотя они собирались что-то сделать с этим наконец). С другой стороны, у тебя коррелированные запросы, то есть первый из них в любом случае перевычисляется каждый раз, а второй, во WHERE, такого вида что я сомневаюсь что Postgres придумает что-то более умное чем просто его каждый раз перевычислять.

То есть мой прогноз - большой разницы между PG и MySQL-ем не будет. Если попробуешь, отпиши :-)

gods-little-toy ★★★
()

Последнее время MySQL все и больше и больше меня разочаровывает. А все потому что, все больше и больше углубляюсь в тонкости его функционала. Функционал есть, да. Но его реализация и его работоспособность на жопном уровне. За 5 лет и подумать не мог, что MySQL настолько уродская СУБД.

Постгрес вообще не знаю. Но собираюсь, как раз заняться изучением. Но для кол-ва данных < 1000 думаю и та и другая - одинаково (если будет осуществляться только выборка, а не запись с транзакциями и т.д.).

Короче в твоем случае что выбирать - не важно.

VirRaa ★★★
()
Ответ на: комментарий от VirRaa

>За 5 лет и подумать не мог, что MySQL настолько уродская СУБД.

просто под MySQL надо программировать по-другому. Простые быстрые запросы, БД как готовый Btree чисто для хранения, основная работа в ORM'е, который быстро ложит и быстро достаёт. Всякая хитрая логика -- в сервере приложений, а не в запросах с подзапросами.

Нужен ли в таком случае сам MySQL -- вопрос отдельный :)

anonymous
()

юзай sqlite. энтерпрайз солюшн.

anonymous
()
Ответ на: комментарий от gods-little-toy

Хм... А как поведет себя в такой ситуации Oracle XE, MaxDB?

Ian ★★
()
Ответ на: комментарий от UserUnknown

Все зависит от сферы применения. Если это LAMP, то MySQL. Если это массивная БД, то лучше PostgreSQL. Я использую последнюю во всех работах, и я еще ни разу не пожалел о своем выборе.

Кому интересно в журнале Системный администратор, есть статья в которой проводится сравнение этих двух СУБД - PostgreSQL выйграл это соревнование.

Всего доброго.

amfibrahii
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.