Index mods '+0' from sqlcoder on mailing list
Have been tested and provide a significant improvement on import. """ Along with new indexes, I think some of the sql in fpdb_simple can be altered to make it use existing indexes more effectively. Generally these mods affect statements where the db has a choice of 2 indexes to use and I think it is choosing badly, e.g. it is using tourneyTypeId which could match the whole table when it could use the new siteTourneyNo index which will return very few rows. To stop the db from using an index I'm just adding zero to the field, so something like playerId = %s changes to playerId+0 = %s We humans can tell this is no real change at all, but the db sees this as a change from <field> = <value> to <expression> = <value>, and it can only use the index if the <field> the index is on is being tested. (Nowadays you can index expressions in some databases but we'll ignore that!) """
This commit is contained in:
parent
afea3315fc
commit
51ce6fc191
|
@ -1286,7 +1286,7 @@ def store_hands_players_holdem_omaha(cursor, category, hands_id, player_ids, sta
|
||||||
(hands_id, player_ids[i], start_cashes[i], positions[i],
|
(hands_id, player_ids[i], start_cashes[i], positions[i],
|
||||||
card_values[i][0], card_suits[i][0], card_values[i][1], card_suits[i][1],
|
card_values[i][0], card_suits[i][0], card_values[i][1], card_suits[i][1],
|
||||||
winnings[i], rakes[i], seatNos[i]))
|
winnings[i], rakes[i], seatNos[i]))
|
||||||
cursor.execute("SELECT id FROM HandsPlayers WHERE handId=%s AND playerId=%s", (hands_id, player_ids[i]))
|
cursor.execute("SELECT id FROM HandsPlayers WHERE handId=%s AND playerId+0=%s", (hands_id, player_ids[i]))
|
||||||
result.append(cursor.fetchall()[0][0])
|
result.append(cursor.fetchall()[0][0])
|
||||||
elif (category=="omahahi" or category=="omahahilo"):
|
elif (category=="omahahi" or category=="omahahilo"):
|
||||||
for i in range (len(player_ids)):
|
for i in range (len(player_ids)):
|
||||||
|
@ -1299,7 +1299,7 @@ def store_hands_players_holdem_omaha(cursor, category, hands_id, player_ids, sta
|
||||||
card_values[i][0], card_suits[i][0], card_values[i][1], card_suits[i][1],
|
card_values[i][0], card_suits[i][0], card_values[i][1], card_suits[i][1],
|
||||||
card_values[i][2], card_suits[i][2], card_values[i][3], card_suits[i][3],
|
card_values[i][2], card_suits[i][2], card_values[i][3], card_suits[i][3],
|
||||||
winnings[i], rakes[i], seatNos[i]))
|
winnings[i], rakes[i], seatNos[i]))
|
||||||
cursor.execute("SELECT id FROM HandsPlayers WHERE handId=%s AND playerId=%s", (hands_id, player_ids[i]))
|
cursor.execute("SELECT id FROM HandsPlayers WHERE handId=%s AND playerId+0=%s", (hands_id, player_ids[i]))
|
||||||
result.append(cursor.fetchall()[0][0])
|
result.append(cursor.fetchall()[0][0])
|
||||||
else:
|
else:
|
||||||
raise FpdbError("invalid category")
|
raise FpdbError("invalid category")
|
||||||
|
@ -1325,7 +1325,7 @@ def store_hands_players_stud(cursor, hands_id, player_ids, start_cashes, antes,
|
||||||
card_values[i][2], card_suits[i][2], card_values[i][3], card_suits[i][3],
|
card_values[i][2], card_suits[i][2], card_values[i][3], card_suits[i][3],
|
||||||
card_values[i][4], card_suits[i][4], card_values[i][5], card_suits[i][5],
|
card_values[i][4], card_suits[i][4], card_values[i][5], card_suits[i][5],
|
||||||
card_values[i][6], card_suits[i][6], winnings[i], rakes[i], seatNos[i]))
|
card_values[i][6], card_suits[i][6], winnings[i], rakes[i], seatNos[i]))
|
||||||
cursor.execute("SELECT id FROM HandsPlayers WHERE handId=%s AND playerId=%s", (hands_id, player_ids[i]))
|
cursor.execute("SELECT id FROM HandsPlayers WHERE handId=%s AND playerId+0=%s", (hands_id, player_ids[i]))
|
||||||
result.append(cursor.fetchall()[0][0])
|
result.append(cursor.fetchall()[0][0])
|
||||||
return result
|
return result
|
||||||
#end def store_hands_players_stud
|
#end def store_hands_players_stud
|
||||||
|
@ -1356,7 +1356,7 @@ def store_hands_players_holdem_omaha_tourney(cursor, category, hands_id, player_
|
||||||
winnings[i], rakes[i], tourneys_players_ids[i], seatNos[i]))
|
winnings[i], rakes[i], tourneys_players_ids[i], seatNos[i]))
|
||||||
else:
|
else:
|
||||||
raise FpdbError ("invalid card_values length:"+str(len(card_values[0])))
|
raise FpdbError ("invalid card_values length:"+str(len(card_values[0])))
|
||||||
cursor.execute("SELECT id FROM HandsPlayers WHERE handId=%s AND playerId=%s", (hands_id, player_ids[i]))
|
cursor.execute("SELECT id FROM HandsPlayers WHERE handId=%s AND playerId+0=%s", (hands_id, player_ids[i]))
|
||||||
result.append(cursor.fetchall()[0][0])
|
result.append(cursor.fetchall()[0][0])
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -1967,9 +1967,9 @@ def storeHudCache(cursor, base, category, gametypeId, playerIds, hudImportData):
|
||||||
|
|
||||||
for player in range (len(playerIds)):
|
for player in range (len(playerIds)):
|
||||||
if base=="hold":
|
if base=="hold":
|
||||||
cursor.execute("SELECT * FROM HudCache WHERE gametypeId=%s AND playerId=%s AND activeSeats=%s AND position=%s", (gametypeId, playerIds[player], len(playerIds), hudImportData['position'][player]))
|
cursor.execute("SELECT * FROM HudCache WHERE gametypeId+0=%s AND playerId=%s AND activeSeats=%s AND position=%s", (gametypeId, playerIds[player], len(playerIds), hudImportData['position'][player]))
|
||||||
else:
|
else:
|
||||||
cursor.execute("SELECT * FROM HudCache WHERE gametypeId=%s AND playerId=%s AND activeSeats=%s", (gametypeId, playerIds[player], len(playerIds)))
|
cursor.execute("SELECT * FROM HudCache WHERE gametypeId+0=%s AND playerId=%s AND activeSeats=%s", (gametypeId, playerIds[player], len(playerIds)))
|
||||||
row=cursor.fetchone()
|
row=cursor.fetchone()
|
||||||
#print "gametypeId:", gametypeId, "playerIds[player]",playerIds[player], "len(playerIds):",len(playerIds), "row:",row
|
#print "gametypeId:", gametypeId, "playerIds[player]",playerIds[player], "len(playerIds):",len(playerIds), "row:",row
|
||||||
|
|
||||||
|
@ -2115,7 +2115,7 @@ def storeHudCache(cursor, base, category, gametypeId, playerIds, hudImportData):
|
||||||
#end def storeHudCache
|
#end def storeHudCache
|
||||||
|
|
||||||
def store_tourneys(cursor, tourneyTypeId, siteTourneyNo, entries, prizepool, startTime):
|
def store_tourneys(cursor, tourneyTypeId, siteTourneyNo, entries, prizepool, startTime):
|
||||||
cursor.execute("SELECT id FROM Tourneys WHERE siteTourneyNo=%s AND tourneyTypeId=%s", (siteTourneyNo, tourneyTypeId))
|
cursor.execute("SELECT id FROM Tourneys WHERE siteTourneyNo=%s AND tourneyTypeId+0=%s", (siteTourneyNo, tourneyTypeId))
|
||||||
tmp=cursor.fetchone()
|
tmp=cursor.fetchone()
|
||||||
#print "tried SELECTing tourneys.id, result:",tmp
|
#print "tried SELECTing tourneys.id, result:",tmp
|
||||||
|
|
||||||
|
@ -2125,7 +2125,7 @@ def store_tourneys(cursor, tourneyTypeId, siteTourneyNo, entries, prizepool, sta
|
||||||
cursor.execute("""INSERT INTO Tourneys
|
cursor.execute("""INSERT INTO Tourneys
|
||||||
(tourneyTypeId, siteTourneyNo, entries, prizepool, startTime)
|
(tourneyTypeId, siteTourneyNo, entries, prizepool, startTime)
|
||||||
VALUES (%s, %s, %s, %s, %s)""", (tourneyTypeId, siteTourneyNo, entries, prizepool, startTime))
|
VALUES (%s, %s, %s, %s, %s)""", (tourneyTypeId, siteTourneyNo, entries, prizepool, startTime))
|
||||||
cursor.execute("SELECT id FROM Tourneys WHERE siteTourneyNo=%s AND tourneyTypeId=%s", (siteTourneyNo, tourneyTypeId))
|
cursor.execute("SELECT id FROM Tourneys WHERE siteTourneyNo=%s AND tourneyTypeId+0=%s", (siteTourneyNo, tourneyTypeId))
|
||||||
tmp=cursor.fetchone()
|
tmp=cursor.fetchone()
|
||||||
#print "created new tourneys.id:",tmp
|
#print "created new tourneys.id:",tmp
|
||||||
return tmp[0]
|
return tmp[0]
|
||||||
|
@ -2139,7 +2139,7 @@ def store_tourneys_players(cursor, tourney_id, player_ids, payin_amounts, ranks,
|
||||||
#print "ranks:",ranks
|
#print "ranks:",ranks
|
||||||
#print "winnings:",winnings
|
#print "winnings:",winnings
|
||||||
for i in range (len(player_ids)):
|
for i in range (len(player_ids)):
|
||||||
cursor.execute("SELECT id FROM TourneysPlayers WHERE tourneyId=%s AND playerId=%s", (tourney_id, player_ids[i]))
|
cursor.execute("SELECT id FROM TourneysPlayers WHERE tourneyId=%s AND playerId+0=%s", (tourney_id, player_ids[i]))
|
||||||
tmp=cursor.fetchone()
|
tmp=cursor.fetchone()
|
||||||
#print "tried SELECTing tourneys_players.id:",tmp
|
#print "tried SELECTing tourneys_players.id:",tmp
|
||||||
|
|
||||||
|
@ -2150,7 +2150,7 @@ def store_tourneys_players(cursor, tourney_id, player_ids, payin_amounts, ranks,
|
||||||
(tourneyId, playerId, payinAmount, rank, winnings) VALUES (%s, %s, %s, %s, %s)""",
|
(tourneyId, playerId, payinAmount, rank, winnings) VALUES (%s, %s, %s, %s, %s)""",
|
||||||
(tourney_id, player_ids[i], payin_amounts[i], ranks[i], winnings[i]))
|
(tourney_id, player_ids[i], payin_amounts[i], ranks[i], winnings[i]))
|
||||||
|
|
||||||
cursor.execute("SELECT id FROM TourneysPlayers WHERE tourneyId=%s AND playerId=%s",
|
cursor.execute("SELECT id FROM TourneysPlayers WHERE tourneyId=%s AND playerId+0=%s",
|
||||||
(tourney_id, player_ids[i]))
|
(tourney_id, player_ids[i]))
|
||||||
tmp=cursor.fetchone()
|
tmp=cursor.fetchone()
|
||||||
#print "created new tourneys_players.id:",tmp
|
#print "created new tourneys_players.id:",tmp
|
||||||
|
|
Loading…
Reference in New Issue
Block a user