Nézet tábla vagy Group by
Van egy netes játék, amely egy sql dump fileban adja meg a játékban lévő falvak infóit.
pl. http://ts1.travian.hu/map.sql
Ennek a szerkezete a következő:ID: Number of the field, starts in the top left corner at the coordinate (-400|400) and ends in the bottom right corner at (400|-400).
X: X-Coordinate of the village.
Y: Y-Coordinate of the village.
TID: The tribe number. 1 = Roman, 2 = Teuton, 3 = Gaul, 4 = Nature and 5 = Natars
VID: Village number. The unique ID for the village.
Village: The name of the village.
UID: The player’s unique ID, also known as User-ID.
Player: The player name.
AID: The alliance’s unique ID.
Alliance: The alliance name.
Population: The village’s number of inhabitants without the troops.
Egy klánban több játékos is lehet és egy játékosnak több falva is. Ebben ugye falvanként van felsorolva minden infó. Eddig azt csináltam hogy ezt ahogy van beraktam egy táblába. Majd valahányszor egy játékos adataira voltam kíváncsi group by-al lekérdeztem(a népesség miatt).
Nem rég viszont létrehoztam 3 nézettáblát.
pl. a játékosokra eztValamiért az az érzésem, hogy a nézettábla hatékonyabb, bár lehet ez hülyeség. Ezért szeretném megkérdezni, melyik a hatékonyabb? Van egyáltalán különbség?
■ pl. http://ts1.travian.hu/map.sql
Ennek a szerkezete a következő:
CREATE TABLE `x_world` (
`id` int(9) unsigned NOT NULL default '0',
`x` smallint(3) NOT NULL default '0',
`y` smallint(3) NOT NULL default '0',
`tid` tinyint(1) unsigned NOT NULL default '0',
`vid` int(9) unsigned NOT NULL default '0',
`village` varchar(20) NOT NULL default '',
`uid` int(9) NOT NULL default '0',
`player` varchar(20) NOT NULL default '',
`aid` int(9) unsigned NOT NULL default '0',
`alliance` varchar(8) NOT NULL default '',
`population` smallint(5) unsigned NOT NULL default '0',
UNIQUE KEY `id` (`id`) );
X: X-Coordinate of the village.
Y: Y-Coordinate of the village.
TID: The tribe number. 1 = Roman, 2 = Teuton, 3 = Gaul, 4 = Nature and 5 = Natars
VID: Village number. The unique ID for the village.
Village: The name of the village.
UID: The player’s unique ID, also known as User-ID.
Player: The player name.
AID: The alliance’s unique ID.
Alliance: The alliance name.
Population: The village’s number of inhabitants without the troops.
Egy klánban több játékos is lehet és egy játékosnak több falva is. Ebben ugye falvanként van felsorolva minden infó. Eddig azt csináltam hogy ezt ahogy van beraktam egy táblába. Majd valahányszor egy játékos adataira voltam kíváncsi group by-al lekérdeztem(a népesség miatt).
Nem rég viszont létrehoztam 3 nézettáblát.
pl. a játékosokra ezt
CREATE VIEW `".$options['world_db_name']."_players` AS SELECT
`aid`,
`alliance`,
`uid`,
`tid`,
`player`,
CONCAT(`player`,' [',`alliance`,']') AS `player_alliance`,
SUM(`population`) AS `population`
FROM `".$options['world_db_name']."` GROUP BY `uid`;
View
Köszönöm a gyors választ. Az
Nem hogy gyorsabb lesz, de
Itt van pár érdekes anyag, amik további linkekkel is szolgálnak a témában.
Magyarul nem tudom, mennyire van naprakész anyag a témában, de itt egy régi Weblabor-fórumtéma.
Köszönöm a linkeket.
Nem hogy gyorsabb lesz, de
Jó, azért sejtem, hogy MySQL. De például PostgreSQL esetében rengeteget tud dobni a nézet. Alapból már azért is, mert előfordított állapotban tárolja, a nevek helyett már eleve OID-ekkel, illetve az objektum statisztikákkal összekapcsolva. De ezen túlmenően néha nagyon lekörözte a józan paraszti logikámat. Láttam olyant, hogy adott volt ~10000 bejegyzést visszaadó lekérdezés, több táblából joinolt és nem volt benne szűrés. Ha ebbe közvetlenül beszúrtam a where feltételt úgy 4~5-ször lassabb volt mint ha a lekérdezésből nézetet csináltam és a nézetből való lekérdezéshez írtam a where feltételt. Sajnos soha nem sikerült ezt megfejteni.
Gondolom MySQL-re a fentiek nem mind igazak, de én személy szerint csak mérési eredmények alapján szoktam dönteni a nézetek hasznosságáról.
Így van
Jogos, a fejemben az volt,
A beillesztett SQL-ből ki