Teljesítmény szempontjából, milyen általánosan elfogadott szabályokat kell alkalmazni egy ilyen adatbázis sémára?
Golang
Miért nem garantálják a Go fejlesztők a térkép bejárási sorrendjét a range során?
Mit tegyünk, ha minden szükséges indexet hozzáadtunk, de az adatbázis még mindig nem bírja a terhelést, és lassul?
// GetUsersList visszaadja a felhasználók listáját. (Az adatbázisban körülbelül 1 millió felhasználót tárolunk) // A felhasználók listájának megjelenítéséhez az admin panelen. Ha isActive = true, csak az aktív felhasználók kerülnek visszaadásra. func (u *UsersRepo) GetUsersList(ctx context.Context, isActive bool) ([]User, error) { rows, err := u.DB.Query("SELECT id, name, phone FROM users WHERE is_active = ?", isActive) if err != nil { return nil, errors.New("hiba a felhasználók listájának lekérdezésekor") } var users []User // Töltse ki a felhasználókról szóló információkat. for rows.Next() { var user User err := rows.Scan(&user.ID, &user.Name, &user.Phone) if err != nil { return nil, err } // Szerezze meg a felhasználó e-mail listáját err, err := u.DB.QueryContext(ctx, "SELECT email FROM user_emails WHERE user_id = ?", user.ID) if err != nil { return nil, errors.New("hiba a felhasználók listájának lekérdezésekor") } var emails []string for er.Next() { var email string err := rows.Scan(&email) if err != nil { return nil, err } emails = append(emails, email) } if len(emails) != 0 { for i, e := range emails { e = strings.ToLower(e) emails[i] = e } } user.Emails = emails // Szerezze meg a profil információkat a VKontakte API-ból profile, err := getUserProfileFromVkApiByUserPhone(user.Phone) if err != nil { return nil, errors.New("hiba a felhasználók listájának lekérdezésekor") } user.Profile = profile users = append(users, user) } if err = rows.Err(); err != nil { return nil, errors.New("hiba a felhasználók listájának lekérdezésekor") } }
-- listázza a könyvek listáját id szerint rendezve, -- de a kimenetben cseréld meg a 2. és 3. sort: -- 1 Mester és Margarita 100 -- 3 Az arany Telenok 50 -- 2 A tizenkét szék 200 -- 4 Eugen Onegin 250 -- 5 Belkin történetei 90 -- 6 A három muskétás 60