Attualmente ho creato una pagina simile a Facebook che richiama le notifiche da tabelle diverse, diciamo circa 8 tabelle. Ogni tabella ha una struttura diversa con colonne diverse, quindi la prima cosa che mi viene in mente è che avrò una tabella globale, come un sommario, e la aggiornerò ad ogni nuovo hit. So che gli inserimenti sono a uso intensivo di risorse, ma speravo che dal momento che si tratta di un tavolo statico, aggiungerei solo un nuovo record ogni 100 visitatori, quindi ho pensato "FORSE" che avrei potuto farcela, ma ho sbagliato. Sono riuscito a ottenere deadlock da solo tre persone che martellano il sito web.MySql Temp Tables VS Views VS array php
Quindi, comunque, ora devo rifarlo usando un metodo diverso. Inizialmente stavo per fare punti di vista, ma ho un problema con le visualizzazioni. La tabella selezionata dovrà contenere l'id di un utente. Ecco un esempio di un'istruzione select da 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
Mi dispiace per la confusione. In ogni caso, come puoi vedere, ho bisogno di restituire l'ID utente dalla pagina come colonna selezionata dalla tabella. Non riuscivo a capire come farlo con le visualizzazioni, quindi non penso che le visualizzazioni siano il modo in cui mi dirigerò perché ci sono molti più tipi di query. Vengo da uno sfondo MSSQL e adoro le stored procedure, quindi se ci sono stored procedure per MySQL, sarebbe eccellente.
Successivamente ho iniziato a pensare ai tavoli temporanei. La tabella sarà in memoria, la tabella avrà probabilmente un massimo di 150 righe e non ci saranno deadlock. È ancora molto costoso fare inserti su un tavolo temporaneo? Finirò per bloccare il server? Al momento abbiamo forse 100 utenti al giorno, ma voglio provare a essere a prova di futuro quando avremo più utenti.
Dopo un lungo pensiero, ho pensato che l'unico modo è l'utente php e ottenere tutti i risultati come una matrice. Il problema è che mi piacerebbe avere qualcosa di simile:
$my_array[0]["date_created"] = <current_date>
Il problema di quanto sopra è che devo ordinare in base date_created, ma questo è un array multi dimensionale.
In ogni caso, per trasferire da 150 a 200 record MAX da un database, quale approccio sceglieresti? Tabella Temp, vista o php?
Le viste non sono necessarie istruzioni 'select'. Potrebbero essere anche tavoli temporanei. Vedi http://www.percona.com/blog/2007/08/12/mysql-view-as-performance-troublemaker/ e http://www.percona.com/blog/2010/05/19/a -workaround-for-the-performance-problems-of-temptable-views /, e http://dba.stackexchange.com/a/16376/9405 – Pacerier