В настоящее время я создал Facebook-подобную страницу, которая извлекает уведомления из разных таблиц, скажем, около 8 таблиц. Каждая таблица имеет разную структуру с разными столбцами, поэтому первое, что приходит в голову, это то, что у меня будет глобальная таблица, например, оглавление, и обновляйте ее с каждым новым ударом. Я знаю, что вставки ресурсоемкие, но я надеялся, что, поскольку это статическая таблица, я бы добавил только одну новую запись каждые 100 посетителей, поэтому я подумал: «МОГУТ», я мог бы с этим справиться, но я ошибся. Мне удалось получить тупики от трех человек, забивающих сайт.MySql Temp Tables VS Views VS php arrays
Так или иначе, теперь мне нужно повторить его, используя другой метод. Сначала я собирался делать представления, но у меня проблема с мнениями. Выбранная таблица должна содержать идентификатор пользователя. Ниже приведен пример выбора из php:
$get_events = "
SELECT id, " . $userId . ", 'admin_events', 0, event_start_time
FROM admin_events
WHERE CURDATE() < event_start_time AND
NOT EXISTS(SELECT id
FROM admin_event_registrations
WHERE user_id = " . $userId . " AND admin_events.id = event_id) AND
NOT EXISTS(SELECT id
FROM admin_event_declines
WHERE user_id = " . $userId . " AND admin_events.id = event_id) AND
event_capacity > (SELECT COUNT(*) FROM admin_event_registrations WHERE event_id = admin_events.id)
LIMIT 1
Извините за беспорядок. В любом случае, как вы можете видеть, мне нужно вернуть идентификатор пользователя со страницы в качестве выбранного столбца из таблицы. Я не мог понять, как это сделать с представлениями, поэтому я не думаю, что взгляды - это то, как я буду руководить, потому что есть намного больше таких типов запросов. Я пришел из фона MSSQL, и мне нравятся хранимые процедуры, поэтому, если есть хранимые процедуры для MYSQL, это будет отлично.
Далее я начал думать о временных таблицах. Таблица будет в памяти, таблица будет, вероятно, 150 строк макс, и не будет взаимоблокировок. До сих пор очень дорого делать вставки на временной таблице? Я в конечном итоге сбой сервера? Сейчас у нас есть, возможно, 100 пользователей в день, но я хочу попытаться быть будущим доказательством, когда мы получим больше пользователей.
После долгой мысли я решил, что единственный способ - это пользовательский php и получить все результаты в виде массива. Проблема заключается в том, что я хотел бы получить что-то вроде:
$my_array[0]["date_created"] = <current_date>
Проблема с выше является то, что я должен сортировать date_created, но это многомерные массив.
В любом случае, чтобы вытащить 150-200 записей MAX из базы данных, какой подход вы бы взяли? Temp Table, View или php?
В представлениях «select' нет необходимости». Они также могут быть временными таблицами. См. Http://www.percona.com/blog/2007/08/12/mysql-view-as-performance-troublemaker/ и http://www.percona.com/blog/2010/05/19/a -workaround-for-the-performance-problems-of-temptable-views /, и http://dba.stackexchange.com/a/16376/9405 – Pacerier