PgHero

Queries

Total Time Average Time Calls
15,275 min 19% 4 ms 210,148,762 ankipro
SELECT "v2"."decks"."id" FROM "v2"."decks" WHERE ("v2"."decks"."ancestry" LIKE $1 OR "v2"."decks"."id" = $2) AND "v2"."decks"."state" != $3
7,253 min 9% 12 ms 35,862,638 ankipro
SELECT "v2"."notes"."id" FROM "v2"."notes" WHERE "v2"."notes"."id" IN ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $30, $31, $32, $33, $34, $35, $36, $37, $38, $39, $40, $41, $42, $43, $44, $45, $46, $47, $48, $49, $50, $51, $52, $53, $54, $55, $56, $57, $58, $59, $60, $61, $62, $63, $64, $65, $66, $67, $68, $69, $70, $71, $72, $73, $74, $75, $76, $77, $78, $79, $80, $81, $82, $83, $84, $85, $86, $87, $88, $89, $90, $91, $92, $93, $94, $95, $96, $97, $98, $99, $100, $101, $102, $103, $104, $105, $106, $107, $108, $109, $110, $111, $112, $113, $114, $115, $116, $117, $118, $119, $120, $121, $122, $123, $124, $125, $126, $127, $128, $129, $130, $131, $132, $133, $134, $135, $136, $137, $138, $139, $140, $141, $142, $143, $144, $145, $146, $147, $148, $149, $150)
3,148 min 4% 13 ms 14,848,317 ankipro
WITH subtree_decks AS ( SELECT id, ancestry FROM v2.decks WHERE (id IN ($1) OR ancestry LIKE $2) AND state NOT IN ($3,$4,$5) ), min_next_reviews AS ( SELECT deck_id, MIN(next_review_at) AS min_next_review_at FROM v2.card_progresses WHERE deck_id IN (SELECT id FROM subtree_decks) AND user_id = $6 AND frozen = $7 GROUP BY deck_id ) SELECT sd.id AS deck_id, sd.ancestry, mn.min_next_review_at FROM subtree_decks sd LEFT JOIN min_next_reviews mn ON sd.id = mn.deck_id
2,024 min 3% 3 ms 42,781,217 ankipro
SELECT "v2"."card_progresses"."id", "v2"."card_progresses"."ease_factor", "v2"."card_progresses"."frozen", "v2"."card_progresses"."interval", "v2"."card_progresses"."learning_state", "v2"."card_progresses"."learning_steps_index", "v2"."card_progresses"."next_review_at", "v2"."card_progresses"."ordinal", "v2"."card_progresses"."raw_next_review_at", "v2"."card_progresses"."to_learn_in_current_sl_round", "v2"."card_progresses"."note_id", "v2"."card_progresses"."user_id", "v2"."card_progresses"."created_at", "v2"."card_progresses"."updated_at", "v2"."card_progresses"."fetch_priority", "v2"."card_progresses"."deck_id", "v2"."card_progresses"."undo_data" FROM "v2"."card_progresses" WHERE "v2"."card_progresses"."note_id" = $1 AND "v2"."card_progresses"."ordinal" = $2 AND "v2"."card_progresses"."user_id" = $3 LIMIT $4
Covered by index on (note_id)
Rows: 112947160
Row progression: 112947160, 0

Row estimates
- note_id (=): 0
- user_id (=): 773
- ordinal (=): 112947160

Existing indexes
- id PRIMARY
- id, deck_id PRIMARY
- deck_id
- deck_id, id
- deck_id, user_id, note_id
- library_card_id
- library_note_id
- note_id
- user_id
- user_id, frozen
- user_id, id
- user_id, note_id
1,729 min 2% 361 ms 287,158 ankipro
SELECT "v2"."decks"."id", "v2"."decks"."deck_collaborators_count", "v2"."decks"."deleted_by_user_at", "v2"."decks"."downvotes", "v2"."decks"."import_error_message", "v2"."decks"."name", "v2"."decks"."last_reset_at", "v2"."decks"."public_state", "v2"."decks"."sharing_token", "v2"."decks"."state", "v2"."decks"."visibility", "v2"."decks"."upvotes", "v2"."decks"."user_id", "v2"."decks"."created_at", "v2"."decks"."updated_at", "v2"."decks"."ancestry", "v2"."decks"."slug", "v2"."decks"."seo_description", "v2"."decks"."description", "v2"."decks"."category", "v2"."decks"."cloned_times_count", "v2"."decks"."is_indexable", "v2"."decks"."study_score", "v2"."decks"."library_deck_id", "v2"."decks"."file_hash", "v2"."decks"."cloned_from_id", "v2"."decks"."anki_deck_id", "v2"."decks"."studiers_count", "v2"."decks"."deck_id", "v2"."decks"."moved_at", "v2"."decks"."source", "v2"."decks"."reviews_count", "v2"."decks"."duplicated_from_id", "v2"."decks"."no_cards_limit", "v2"."decks"."category_id" FROM "v2"."decks" WHERE "v2"."decks"."public_state" = $1 AND "v2"."decks"."ancestry" = $2 AND "v2"."decks"."sharing_token" = $3 LIMIT $4
1,542 min 2% 8 ms 11,144,505 ankipro
SELECT "v2"."note_attachments"."id", "v2"."note_attachments"."note_id", "v2"."note_attachments"."deck_id", "v2"."note_attachments"."attachment_id", "v2"."note_attachments"."kind", "v2"."note_attachments"."created_at", "v2"."note_attachments"."updated_at", "v2"."note_attachments"."field_name" FROM "v2"."note_attachments" WHERE "v2"."note_attachments"."note_id" IN ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20)
1,540 min 2% 3 ms 26,909,601 ankipro
SELECT "v2"."card_progresses"."note_id" FROM "v2"."card_progresses" WHERE "v2"."card_progresses"."deck_id" = $1 AND "v2"."card_progresses"."user_id" = $2 AND "v2"."card_progresses"."frozen" = $3
Covered by index on (deck_id, user_id, note_id)
Rows: 112947160
Row progression: 112947160, 274, 0

Row estimates
- deck_id (=): 274
- user_id (=): 773
- frozen (=): 56473580

Existing indexes
- id PRIMARY
- id, deck_id PRIMARY
- deck_id
- deck_id, id
- deck_id, user_id, note_id
- library_card_id
- library_note_id
- note_id
- user_id
- user_id, frozen
- user_id, id
- user_id, note_id
1,510 min 2% 5 ms 19,310,851 ankipro
SELECT "v2"."decks"."id" FROM "v2"."decks" WHERE "v2"."decks"."state" != $1 AND "v2"."decks"."id" IN (SELECT "v2"."deck_settings"."deck_id" FROM "v2"."deck_settings" WHERE "v2"."deck_settings"."user_id" = $2 AND "v2"."deck_settings"."state" = $3)
1,486 min 2% 1 ms 76,384,744 ankipro
SELECT COUNT(id) AS total, SUM(CASE WHEN NOT frozen AND learning_state = $1 THEN $2 ELSE $3 END) AS new, SUM(CASE WHEN NOT frozen AND learning_state = $4 AND next_review_at < $5 THEN $6 ELSE $7 END) AS learning, SUM(CASE WHEN NOT frozen AND learning_state = $8 AND next_review_at < $9 THEN $10 ELSE $11 END) AS graduated, SUM(CASE WHEN NOT frozen AND learning_state = $12 THEN $13 ELSE $14 END) AS learning_total, SUM(CASE WHEN NOT frozen AND learning_state = $15 THEN $16 ELSE $17 END) AS graduated_total, SUM(CASE WHEN NOT frozen AND learning_state = $18 THEN $19 ELSE $20 END) AS study_again, SUM(CASE WHEN NOT frozen AND learning_state = $21 THEN $22 ELSE $23 END) AS got_it, SUM(CASE WHEN frozen THEN $24 ELSE $25 END) as frozen, SUM(CASE WHEN NOT frozen AND learning_state IN($26, $27, $28) AND next_review_at < $29 THEN $30 ELSE $31 END) as offline_available, MIN(CASE WHEN NOT frozen AND next_review_at > $32 THEN next_review_at ELSE $33 END) as recalculate_at FROM v2.card_progresses WHERE user_id = $34 AND deck_id IN ($35)
Covered by index on (deck_id, user_id, note_id)
Rows: 112947160
Row progression: 112947160, 274, 0

Row estimates
- deck_id (=): 274
- user_id (=): 773

Existing indexes
- id PRIMARY
- id, deck_id PRIMARY
- deck_id
- deck_id, id
- deck_id, user_id, note_id
- library_card_id
- library_note_id
- note_id
- user_id
- user_id, frozen
- user_id, id
- user_id, note_id
1,473 min 2% 8 ms 11,072,472 ankipro
SELECT "v2"."note_attachments"."id", "v2"."note_attachments"."note_id", "v2"."note_attachments"."deck_id", "v2"."note_attachments"."attachment_id", "v2"."note_attachments"."kind", "v2"."note_attachments"."created_at", "v2"."note_attachments"."updated_at", "v2"."note_attachments"."field_name" FROM "v2"."note_attachments" WHERE "v2"."note_attachments"."note_id" IN ($1, $2, $3, $4, $5, $6, $7)
1,155 min 1% 1 ms 67,675,265 ankipro
SELECT "v2"."decks"."id" AS t0_r0, "v2"."decks"."deck_collaborators_count" AS t0_r1, "v2"."decks"."deleted_by_user_at" AS t0_r2, "v2"."decks"."downvotes" AS t0_r3, "v2"."decks"."import_error_message" AS t0_r4, "v2"."decks"."name" AS t0_r5, "v2"."decks"."last_reset_at" AS t0_r6, "v2"."decks"."public_state" AS t0_r7, "v2"."decks"."sharing_token" AS t0_r8, "v2"."decks"."state" AS t0_r9, "v2"."decks"."visibility" AS t0_r10, "v2"."decks"."upvotes" AS t0_r11, "v2"."decks"."user_id" AS t0_r12, "v2"."decks"."created_at" AS t0_r13, "v2"."decks"."updated_at" AS t0_r14, "v2"."decks"."ancestry" AS t0_r15, "v2"."decks"."slug" AS t0_r16, "v2"."decks"."seo_description" AS t0_r17, "v2"."decks"."description" AS t0_r18, "v2"."decks"."category" AS t0_r19, "v2"."decks"."cloned_times_count" AS t0_r20, "v2"."decks"."is_indexable" AS t0_r21, "v2"."decks"."study_score" AS t0_r22, "v2"."decks"."library_deck_id" AS t0_r23, "v2"."decks"."file_hash" AS t0_r24, "v2"."decks"."cloned_from_id" AS t0_r25, "v2"."decks"."anki_deck_id" AS t0_r26, "v2"."decks"."studiers_count" AS t0_r27, "v2"."decks"."deck_id" AS t0_r28, "v2"."decks"."moved_at" AS t0_r29, "v2"."decks"."source" AS t0_r30, "v2"."decks"."reviews_count" AS t0_r31, "v2"."decks"."duplicated_from_id" AS t0_r32, "v2"."decks"."no_cards_limit" AS t0_r33, "v2"."decks"."category_id" AS t0_r34, "v2"."deck_settings"."id" AS t1_r0, "v2"."deck_settings"."algorithm_preset" AS t1_r1, "v2"."deck_settings"."deck_id" AS t1_r2, "v2"."deck_settings"."easy_interval_minutes" AS t1_r3, "v2"."deck_settings"."easy_bonus_percent" AS t1_r4, "v2"."deck_settings"."font_settings" AS t1_r5, "v2"."deck_settings"."graduated_interval_minutes" AS t1_r6, "v2"."deck_settings"."interval_modifier_percent" AS t1_r7, "v2"."deck_settings"."last_sync_at" AS t1_r8, "v2"."deck_settings"."library_sharing" AS t1_r9, "v2"."deck_settings"."new_cards_per_day" AS t1_r10, "v2"."deck_settings"."reverse_mode" AS t1_r11, "v2"."deck_settings"."offline_mode" AS t1_r12, "v2"."deck_settings"."sharing" AS t1_r13, "v2"."deck_settings"."steps_in_minutes" AS t1_r14, "v2"."deck_settings"."shuffle_mode" AS t1_r15, "v2"."deck_settings"."tts_autoplay" AS t1_r16, "v2"."deck_settings"."tts" AS t1_r17, "v2"."deck_settings"."tts_back_side_language" AS t1_r18, "v2"."deck_settings"."tts_front_side_language" AS t1_r19, "v2"."deck_settings"."user_id" AS t1_r20, "v2"."deck_settings"."created_at" AS t1_r21, "v2"."deck_settings"."updated_at" AS t1_r22, "v2"."deck_settings"."position" AS t1_r23, "v2"."deck_settings"."tts_whole_card_pronunciation" AS t1_r24, "v2"."deck_settings"."state" AS t1_r25, "v2"."deck_settings"."max_cards_per_day" AS t1_r26, "v2"."deck_settings"."card_preset_id" AS t1_r27, "v2"."deck_settings"."max_interval_minutes" AS t1_r28, "v2"."deck_settings"."tts_speed" AS t1_r29, "v2"."deck_settings"."tts_slower_replay" AS t1_r30, "v2"."deck_settings"."folder_id" AS t1_r31, "v2"."deck_counters"."id" AS t2_r0, "v2"."deck_counters"."deck_id" AS t2_r1, "v2"."deck_counters"."got_it_count" AS t2_r2, "v2"."deck_counters"."graduated_count" AS t2_r3, "v2"."deck_counters"."frozen_count" AS t2_r4, "v2"."deck_counters"."learning_count" AS t2_r5, "v2"."deck_counters"."new_count" AS t2_r6, "v2"."deck_counters"."presented_count" AS t2_r7, "v2"."deck_counters"."reviewed_today_count" AS t2_r8, "v2"."deck_counters"."recalculate_at" AS t2_r9, "v2"."deck_counters"."study_again_count" AS t2_r10, "v2"."deck_counters"."to_learn_today_count" AS t2_r11, "v2"."deck_counters"."to_review_count" AS t2_r12, "v2"."deck_counters"."total_new_count" AS t2_r13, "v2"."deck_counters"."user_id" AS t2_r14, "v2"."deck_counters"."created_at" AS t2_r15, "v2"."deck_counters"."updated_at" AS t2_r16, "v2"."deck_counters"."total_not_learned_count" AS t2_r17, "v2"."deck_counters"."offline_available_count" AS t2_r18, "v2"."deck_counters"."learning_total_count" AS t2_r19, "v2"."deck_counters"."graduated_total_count" AS t2_r20 FROM "v2"."decks" INNER JOIN "v2"."deck_settings" ON "v2"."deck_settings"."deck_id" = "v2"."decks"."id" INNER JOIN "v2"."deck_counters" ON "v2"."deck_counters"."deck_id" = "v2"."decks"."id" WHERE ("v2"."decks"."state" IN ($1, $2, $3, $4, $5, $6) AND "v2"."decks"."public_state" = $7 OR "v2"."decks"."state" = $8 OR "v2"."decks"."state" = $9) AND (v2.deck_settings.user_id = $10 AND v2.deck_counters.user_id = $11) AND "v2"."decks"."id" = $12 AND "v2"."decks"."id" = $13
1,138 min 1% 6 ms 12,063,677 ankipro
SELECT "v2"."notes"."id", "v2"."notes"."template_kind", "v2"."notes"."fields", "v2"."notes"."cards_count", "v2"."notes"."deck_id", "v2"."notes"."created_at", "v2"."notes"."updated_at", "v2"."notes"."library_note_id", "v2"."notes"."library_card_id", "v2"."notes"."anki_id", "v2"."notes"."css" FROM "v2"."notes" WHERE "v2"."notes"."id" = $1 LIMIT $2
1,099 min 1% 1 ms 56,374,956 ankipro
SELECT "v2"."card_progresses"."note_id" FROM "v2"."card_progresses" WHERE "v2"."card_progresses"."deck_id" = $1
Covered by index on (deck_id)
Rows: 112947160
Row progression: 112947160, 274

Row estimates
- deck_id (=): 274

Existing indexes
- id PRIMARY
- id, deck_id PRIMARY
- deck_id
- deck_id, id
- deck_id, user_id, note_id
- library_card_id
- library_note_id
- note_id
- user_id
- user_id, frozen
- user_id, id
- user_id, note_id
972 min 1% 5 ms 11,339,885 ankipro
SELECT "v2"."note_attachments"."id", "v2"."note_attachments"."note_id", "v2"."note_attachments"."deck_id", "v2"."note_attachments"."attachment_id", "v2"."note_attachments"."kind", "v2"."note_attachments"."created_at", "v2"."note_attachments"."updated_at", "v2"."note_attachments"."field_name" FROM "v2"."note_attachments" WHERE "v2"."note_attachments"."note_id" = $1
971 min 1% 8 ms 7,372,980 ankipro
SELECT notes.id, notes.deck_id, notes.template_kind, notes.fields, notes.cards_count, notes.css, notes.created_at FROM v2.notes AS notes WHERE notes.deck_id IN ($1) ORDER BY notes.created_at DESC, notes.id DESC OFFSET $2 LIMIT $3
903 min 1% 4 ms 12,671,681 ankipro
SELECT "v2"."decks"."id" FROM "v2"."decks" WHERE ("v2"."decks"."ancestry" LIKE $1 OR "v2"."decks"."id" = $2)
824 min 1% 2 ms 27,101,237 ankipro
SELECT "v2"."deck_settings"."deck_id" FROM "v2"."deck_settings" WHERE "v2"."deck_settings"."user_id" = $1 AND "v2"."deck_settings"."state" = $2
773 min 1.0% 1 ms 67,693,214 ankipro
SELECT DISTINCT "v2"."decks"."id" FROM "v2"."decks" INNER JOIN "v2"."deck_settings" ON "v2"."deck_settings"."deck_id" = "v2"."decks"."id" INNER JOIN "v2"."deck_counters" ON "v2"."deck_counters"."deck_id" = "v2"."decks"."id" WHERE ("v2"."decks"."state" IN ($1, $2, $3, $4, $5, $6) AND "v2"."decks"."public_state" = $7 OR "v2"."decks"."state" = $8 OR "v2"."decks"."state" = $9) AND (v2.deck_settings.user_id = $10 AND v2.deck_counters.user_id = $11) AND "v2"."decks"."id" = $12 LIMIT $13
752 min 1.0% 4 ms 10,239,626 ankipro
SELECT "v2"."note_attachments"."attachment_id" FROM "v2"."note_attachments" WHERE "v2"."note_attachments"."note_id" = $1
741 min 0.9% 2 ms 19,040,340 ankipro
SELECT "v2"."deck_settings"."deck_id" FROM "v2"."deck_settings" WHERE "v2"."deck_settings"."user_id" = $1 AND "v2"."deck_settings"."folder_id" IS NULL
707 min 0.9% 21 ms 2,048,874 ankipro
WITH cte AS ( SELECT id, deck_id, (sum(v2.notes.cards_count) over (order by v2.notes.id)) AS custom_offset FROM v2.notes WHERE $1=$2 AND v2.notes.id IN ($3) ORDER BY id ASC LIMIT $4 ) SELECT * FROM v2.notes AS notes INNER JOIN cte AS c ON c.id = notes.id AND c.deck_id = notes.deck_id AND c.custom_offset > $5 WHERE $6=$7 ORDER BY notes.id ASC LIMIT $8
664 min 0.8% 0 ms 98,552,223 ankipro
SELECT "v2"."decks"."id", "v2"."decks"."deck_collaborators_count", "v2"."decks"."deleted_by_user_at", "v2"."decks"."downvotes", "v2"."decks"."import_error_message", "v2"."decks"."name", "v2"."decks"."last_reset_at", "v2"."decks"."public_state", "v2"."decks"."sharing_token", "v2"."decks"."state", "v2"."decks"."visibility", "v2"."decks"."upvotes", "v2"."decks"."user_id", "v2"."decks"."created_at", "v2"."decks"."updated_at", "v2"."decks"."ancestry", "v2"."decks"."slug", "v2"."decks"."seo_description", "v2"."decks"."description", "v2"."decks"."category", "v2"."decks"."cloned_times_count", "v2"."decks"."is_indexable", "v2"."decks"."study_score", "v2"."decks"."library_deck_id", "v2"."decks"."file_hash", "v2"."decks"."cloned_from_id", "v2"."decks"."anki_deck_id", "v2"."decks"."studiers_count", "v2"."decks"."deck_id", "v2"."decks"."moved_at", "v2"."decks"."source", "v2"."decks"."reviews_count", "v2"."decks"."duplicated_from_id", "v2"."decks"."no_cards_limit", "v2"."decks"."category_id" FROM "v2"."decks" WHERE "v2"."decks"."id" = $1 LIMIT $2
Covered by index on (id)
Rows: 40117592
Row progression: 40117592, 1

Row estimates
- id (=): 1

Existing indexes
- id PRIMARY
- id, user_id PRIMARY
- ancestry
- ancestry text_pattern_ops
- ancestry varchar_pattern_ops
- anki_deck_id
- category_id
- cloned_from_id
- deck_import_id
- deleted_by_user_at, user_id
- id, state
- library_deck_id
- public_state, visibility
- sharing_token varchar_pattern_ops UNIQUE
- state
- user_id
- user_id
643 min 0.8% 933 ms 41,354 ankipro
SELECT DISTINCT "users"."id" AS alias_0, "users"."id" FROM "users" LEFT OUTER JOIN "devices" ON "devices"."user_id" = "users"."id" WHERE (last_seen_time > $1 OR last_seen_time IS NULL) AND "devices"."firebase_token" IS NOT NULL AND "users"."timezone_offset" IN ($2, $3, $4, $5, $6, $7) AND "users"."id" > $8 ORDER BY "users"."id" ASC LIMIT $9
632 min 0.8% 9 ms 4,362,798 ankipro
SELECT "v2"."note_attachments"."id", "v2"."note_attachments"."note_id", "v2"."note_attachments"."deck_id", "v2"."note_attachments"."attachment_id", "v2"."note_attachments"."kind", "v2"."note_attachments"."created_at", "v2"."note_attachments"."updated_at", "v2"."note_attachments"."field_name" FROM "v2"."note_attachments" WHERE "v2"."note_attachments"."note_id" IN ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $30, $31, $32, $33, $34, $35, $36, $37, $38, $39, $40, $41, $42, $43, $44, $45, $46, $47, $48, $49, $50)
553 min 0.7% 20 ms 1,655,769 ankipro
WITH subtree_decks AS ( SELECT id, ancestry FROM v2.decks WHERE (id IN ($1,$2) OR ancestry LIKE $3 OR ancestry LIKE $4) AND state NOT IN ($5,$6,$7) ), min_next_reviews AS ( SELECT deck_id, MIN(next_review_at) AS min_next_review_at FROM v2.card_progresses WHERE deck_id IN (SELECT id FROM subtree_decks) AND user_id = $8 AND frozen = $9 GROUP BY deck_id ) SELECT sd.id AS deck_id, sd.ancestry, mn.min_next_review_at FROM subtree_decks sd LEFT JOIN min_next_reviews mn ON sd.id = mn.deck_id
528 min 0.7% 32 ms 992,945 ankipro
WITH subtree_decks AS ( SELECT id, ancestry FROM v2.decks WHERE (id IN ($1,$2,$3,$4) OR ancestry LIKE $5 OR ancestry LIKE $6 OR ancestry LIKE $7 OR ancestry LIKE $8) AND state NOT IN ($9,$10,$11) ), min_next_reviews AS ( SELECT deck_id, MIN(next_review_at) AS min_next_review_at FROM v2.card_progresses WHERE deck_id IN (SELECT id FROM subtree_decks) AND user_id = $12 AND frozen = $13 GROUP BY deck_id ) SELECT sd.id AS deck_id, sd.ancestry, mn.min_next_review_at FROM subtree_decks sd LEFT JOIN min_next_reviews mn ON sd.id = mn.deck_id
516 min 0.7% 26 ms 1,175,762 ankipro
WITH subtree_decks AS ( SELECT id, ancestry FROM v2.decks WHERE (id IN ($1,$2,$3) OR ancestry LIKE $4 OR ancestry LIKE $5 OR ancestry LIKE $6) AND state NOT IN ($7,$8,$9) ), min_next_reviews AS ( SELECT deck_id, MIN(next_review_at) AS min_next_review_at FROM v2.card_progresses WHERE deck_id IN (SELECT id FROM subtree_decks) AND user_id = $10 AND frozen = $11 GROUP BY deck_id ) SELECT sd.id AS deck_id, sd.ancestry, mn.min_next_review_at FROM subtree_decks sd LEFT JOIN min_next_reviews mn ON sd.id = mn.deck_id
504 min 0.6% 1 ms 50,491,756 ankipro
SELECT "v2"."deck_counters"."id", "v2"."deck_counters"."recalculate_at", "v2"."deck_counters"."deck_id" FROM "v2"."deck_counters" WHERE "v2"."deck_counters"."deck_id" IN ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) AND "v2"."deck_counters"."user_id" = $11
Covered by index on (deck_id)
Rows: 40273848
Row progression: 40273848, 1

Row estimates
- deck_id (=): 1
- user_id (=): 448

Existing indexes
- id PRIMARY
- id, deck_id PRIMARY
- deck_id
- deck_id, user_id UNIQUE
- user_id
- user_id
498 min 0.6% 35 ms 843,564 ankipro
WITH subtree_decks AS ( SELECT id, ancestry FROM v2.decks WHERE (id IN ($1,$2,$3,$4,$5) OR ancestry LIKE $6 OR ancestry LIKE $7 OR ancestry LIKE $8 OR ancestry LIKE $9 OR ancestry LIKE $10) AND state NOT IN ($11,$12,$13) ), min_next_reviews AS ( SELECT deck_id, MIN(next_review_at) AS min_next_review_at FROM v2.card_progresses WHERE deck_id IN (SELECT id FROM subtree_decks) AND user_id = $14 AND frozen = $15 GROUP BY deck_id ) SELECT sd.id AS deck_id, sd.ancestry, mn.min_next_review_at FROM subtree_decks sd LEFT JOIN min_next_reviews mn ON sd.id = mn.deck_id
453 min 0.6% 38 ms 707,233 ankipro
WITH subtree_decks AS ( SELECT id, ancestry FROM v2.decks WHERE (id IN ($1,$2,$3,$4,$5,$6) OR ancestry LIKE $7 OR ancestry LIKE $8 OR ancestry LIKE $9 OR ancestry LIKE $10 OR ancestry LIKE $11 OR ancestry LIKE $12) AND state NOT IN ($13,$14,$15) ), min_next_reviews AS ( SELECT deck_id, MIN(next_review_at) AS min_next_review_at FROM v2.card_progresses WHERE deck_id IN (SELECT id FROM subtree_decks) AND user_id = $16 AND frozen = $17 GROUP BY deck_id ) SELECT sd.id AS deck_id, sd.ancestry, mn.min_next_review_at FROM subtree_decks sd LEFT JOIN min_next_reviews mn ON sd.id = mn.deck_id
435 min 0.5% 0 ms 163,224,585 ankipro
UPDATE "users" SET "last_seen_time" = $1, "last_seen_ip" = $2, "country_code" = $3 WHERE "users"."id" = $4
Covered by index on (id)
Rows: 6901580
Row progression: 6901580, 1

Row estimates
- id (=): 1

Existing indexes
- id PRIMARY
- analytics_id
- analytics_id
- country_code
- email varchar_pattern_ops
- id, timezone_offset
- lower((email)::text)
- qon_id
- reset_password_token WHERE reset_password_token IS NOT NULL
- stripe_customer_id
- uid, provider UNIQUE
- username UNIQUE
417 min 0.5% 5 ms 5,257,539 ankipro
SELECT $1 AS one FROM "v2"."decks" WHERE ("v2"."decks"."ancestry" LIKE $2 OR "v2"."decks"."id" = $3) AND "v2"."decks"."state" != $4 AND "v2"."decks"."state" IN ($5, $6, $7, $8, $9, $10) LIMIT $11
416 min 0.5% 14 ms 1,769,359 ankipro
SELECT "v2"."notes"."id", "v2"."notes"."template_kind", "v2"."notes"."fields", "v2"."notes"."cards_count", "v2"."notes"."deck_id", "v2"."notes"."css" FROM "v2"."notes" WHERE "v2"."notes"."deck_id" = $1 AND "v2"."notes"."id" > $2 ORDER BY "v2"."notes"."id" ASC LIMIT $3
397 min 0.5% 41 ms 585,808 ankipro
WITH subtree_decks AS ( SELECT id, ancestry FROM v2.decks WHERE (id IN ($1,$2,$3,$4,$5,$6,$7) OR ancestry LIKE $8 OR ancestry LIKE $9 OR ancestry LIKE $10 OR ancestry LIKE $11 OR ancestry LIKE $12 OR ancestry LIKE $13 OR ancestry LIKE $14) AND state NOT IN ($15,$16,$17) ), min_next_reviews AS ( SELECT deck_id, MIN(next_review_at) AS min_next_review_at FROM v2.card_progresses WHERE deck_id IN (SELECT id FROM subtree_decks) AND user_id = $18 AND frozen = $19 GROUP BY deck_id ) SELECT sd.id AS deck_id, sd.ancestry, mn.min_next_review_at FROM subtree_decks sd LEFT JOIN min_next_reviews mn ON sd.id = mn.deck_id
359 min 0.5% 43 ms 495,661 ankipro
WITH subtree_decks AS ( SELECT id, ancestry FROM v2.decks WHERE (id IN ($1,$2,$3,$4,$5,$6,$7,$8) OR ancestry LIKE $9 OR ancestry LIKE $10 OR ancestry LIKE $11 OR ancestry LIKE $12 OR ancestry LIKE $13 OR ancestry LIKE $14 OR ancestry LIKE $15 OR ancestry LIKE $16) AND state NOT IN ($17,$18,$19) ), min_next_reviews AS ( SELECT deck_id, MIN(next_review_at) AS min_next_review_at FROM v2.card_progresses WHERE deck_id IN (SELECT id FROM subtree_decks) AND user_id = $20 AND frozen = $21 GROUP BY deck_id ) SELECT sd.id AS deck_id, sd.ancestry, mn.min_next_review_at FROM subtree_decks sd LEFT JOIN min_next_reviews mn ON sd.id = mn.deck_id
338 min 0.4% 48 ms 422,696 ankipro
SELECT "v2"."notes"."id", "v2"."notes"."template_kind", "v2"."notes"."fields", "v2"."notes"."cards_count", "v2"."notes"."deck_id", "v2"."notes"."css" FROM "v2"."notes" WHERE "v2"."notes"."deck_id" = $1 ORDER BY "v2"."notes"."id" ASC LIMIT $2
316 min 0.4% 46 ms 410,071 ankipro
WITH subtree_decks AS ( SELECT id, ancestry FROM v2.decks WHERE (id IN ($1,$2,$3,$4,$5,$6,$7,$8,$9) OR ancestry LIKE $10 OR ancestry LIKE $11 OR ancestry LIKE $12 OR ancestry LIKE $13 OR ancestry LIKE $14 OR ancestry LIKE $15 OR ancestry LIKE $16 OR ancestry LIKE $17 OR ancestry LIKE $18) AND state NOT IN ($19,$20,$21) ), min_next_reviews AS ( SELECT deck_id, MIN(next_review_at) AS min_next_review_at FROM v2.card_progresses WHERE deck_id IN (SELECT id FROM subtree_decks) AND user_id = $22 AND frozen = $23 GROUP BY deck_id ) SELECT sd.id AS deck_id, sd.ancestry, mn.min_next_review_at FROM subtree_decks sd LEFT JOIN min_next_reviews mn ON sd.id = mn.deck_id
285 min 0.4% 0 ms 43,468,380 ankipro
SELECT "v2"."deck_settings"."id", "v2"."deck_settings"."algorithm_preset", "v2"."deck_settings"."deck_id", "v2"."deck_settings"."easy_interval_minutes", "v2"."deck_settings"."easy_bonus_percent", "v2"."deck_settings"."font_settings", "v2"."deck_settings"."graduated_interval_minutes", "v2"."deck_settings"."interval_modifier_percent", "v2"."deck_settings"."last_sync_at", "v2"."deck_settings"."library_sharing", "v2"."deck_settings"."new_cards_per_day", "v2"."deck_settings"."reverse_mode", "v2"."deck_settings"."offline_mode", "v2"."deck_settings"."sharing", "v2"."deck_settings"."steps_in_minutes", "v2"."deck_settings"."shuffle_mode", "v2"."deck_settings"."tts_autoplay", "v2"."deck_settings"."tts", "v2"."deck_settings"."tts_back_side_language", "v2"."deck_settings"."tts_front_side_language", "v2"."deck_settings"."user_id", "v2"."deck_settings"."created_at", "v2"."deck_settings"."updated_at", "v2"."deck_settings"."position", "v2"."deck_settings"."tts_whole_card_pronunciation", "v2"."deck_settings"."state", "v2"."deck_settings"."max_cards_per_day", "v2"."deck_settings"."card_preset_id", "v2"."deck_settings"."max_interval_minutes", "v2"."deck_settings"."tts_speed", "v2"."deck_settings"."tts_slower_replay", "v2"."deck_settings"."folder_id" FROM "v2"."deck_settings" WHERE "v2"."deck_settings"."deck_id" = $1
Covered by index on (deck_id)
Rows: 40345728
Row progression: 40345728, 1

Row estimates
- deck_id (=): 1

Existing indexes
- id PRIMARY
- id, deck_id PRIMARY
- deck_id
- deck_id
- folder_id
- user_id
- user_id
280 min 0.4% 47 ms 353,829 ankipro
WITH subtree_decks AS ( SELECT id, ancestry FROM v2.decks WHERE (id IN ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10) OR ancestry LIKE $11 OR ancestry LIKE $12 OR ancestry LIKE $13 OR ancestry LIKE $14 OR ancestry LIKE $15 OR ancestry LIKE $16 OR ancestry LIKE $17 OR ancestry LIKE $18 OR ancestry LIKE $19 OR ancestry LIKE $20) AND state NOT IN ($21,$22,$23) ), min_next_reviews AS ( SELECT deck_id, MIN(next_review_at) AS min_next_review_at FROM v2.card_progresses WHERE deck_id IN (SELECT id FROM subtree_decks) AND user_id = $24 AND frozen = $25 GROUP BY deck_id ) SELECT sd.id AS deck_id, sd.ancestry, mn.min_next_review_at FROM subtree_decks sd LEFT JOIN min_next_reviews mn ON sd.id = mn.deck_id
264 min 0.3% 49 ms 325,427 ankipro
WITH subtree_decks AS ( SELECT id, ancestry FROM v2.decks WHERE (id IN ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11) OR ancestry LIKE $12 OR ancestry LIKE $13 OR ancestry LIKE $14 OR ancestry LIKE $15 OR ancestry LIKE $16 OR ancestry LIKE $17 OR ancestry LIKE $18 OR ancestry LIKE $19 OR ancestry LIKE $20 OR ancestry LIKE $21 OR ancestry LIKE $22) AND state NOT IN ($23,$24,$25) ), min_next_reviews AS ( SELECT deck_id, MIN(next_review_at) AS min_next_review_at FROM v2.card_progresses WHERE deck_id IN (SELECT id FROM subtree_decks) AND user_id = $26 AND frozen = $27 GROUP BY deck_id ) SELECT sd.id AS deck_id, sd.ancestry, mn.min_next_review_at FROM subtree_decks sd LEFT JOIN min_next_reviews mn ON sd.id = mn.deck_id
262 min 0.3% 8 ms 1,879,656 ankipro
SELECT "v2"."notes"."id", "v2"."notes"."template_kind", "v2"."notes"."fields", "v2"."notes"."cards_count", "v2"."notes"."deck_id", "v2"."notes"."created_at", "v2"."notes"."updated_at", "v2"."notes"."library_note_id", "v2"."notes"."library_card_id", "v2"."notes"."anki_id", "v2"."notes"."css" FROM "v2"."notes" WHERE "v2"."notes"."id" IN ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $30, $31, $32, $33, $34, $35, $36, $37, $38, $39, $40, $41, $42, $43, $44, $45, $46, $47, $48, $49, $50)
253 min 0.3% 2 ms 6,764,655 ankipro
SELECT notes.id, notes.deck_id, notes.template_kind, notes.fields, notes.cards_count, notes.css, notes.created_at FROM v2.notes AS notes WHERE notes.deck_id IN ($1) ORDER BY notes.created_at DESC, notes.id DESC LIMIT $2
251 min 0.3% 9 ms 1,715,110 ankipro
UPDATE "v2"."decks" SET "state" = $1 WHERE "v2"."decks"."ancestry" LIKE $2 AND "v2"."decks"."state" != $3
Details
CREATE INDEX CONCURRENTLY ON decks USING gist (ancestry gist_trgm_ops)
Rows: 40117592
Row progression: 40117592, 3398070

Row estimates
- ancestry (~~): 3398070
- state (<>): 32094074

Existing indexes
- id PRIMARY
- id, user_id PRIMARY
- ancestry
- ancestry text_pattern_ops
- ancestry varchar_pattern_ops
- anki_deck_id
- category_id
- cloned_from_id
- deck_import_id
- deleted_by_user_at, user_id
- id, state
- library_deck_id
- public_state, visibility
- sharing_token varchar_pattern_ops UNIQUE
- state
- user_id
- user_id
250 min 0.3% 23 ms 654,477 ankipro
WITH cte AS ( SELECT id, deck_id, (sum(v2.notes.cards_count) over (order by v2.notes.id)) AS custom_offset FROM v2.notes WHERE $1=$2 AND v2.notes.id IN ($3,$4,$5,$6,$7) ORDER BY id ASC LIMIT $8 ) SELECT * FROM v2.notes AS notes INNER JOIN cte AS c ON c.id = notes.id AND c.deck_id = notes.deck_id AND c.custom_offset > $9 WHERE $10=$11 ORDER BY notes.id ASC LIMIT $12
248 min 0.3% 0 ms 39,410,003 ankipro
SELECT "v2"."decks"."id", "v2"."decks"."deck_collaborators_count", "v2"."decks"."deleted_by_user_at", "v2"."decks"."downvotes", "v2"."decks"."import_error_message", "v2"."decks"."name", "v2"."decks"."last_reset_at", "v2"."decks"."public_state", "v2"."decks"."sharing_token", "v2"."decks"."state", "v2"."decks"."visibility", "v2"."decks"."upvotes", "v2"."decks"."user_id", "v2"."decks"."created_at", "v2"."decks"."updated_at", "v2"."decks"."ancestry", "v2"."decks"."slug", "v2"."decks"."seo_description", "v2"."decks"."description", "v2"."decks"."category", "v2"."decks"."cloned_times_count", "v2"."decks"."is_indexable", "v2"."decks"."study_score", "v2"."decks"."library_deck_id", "v2"."decks"."file_hash", "v2"."decks"."cloned_from_id", "v2"."decks"."anki_deck_id", "v2"."decks"."studiers_count", "v2"."decks"."deck_id", "v2"."decks"."moved_at", "v2"."decks"."source", "v2"."decks"."reviews_count", "v2"."decks"."duplicated_from_id", "v2"."decks"."no_cards_limit", "v2"."decks"."category_id" FROM "v2"."decks" WHERE "v2"."decks"."id" = $1
Covered by index on (id)
Rows: 40117592
Row progression: 40117592, 1

Row estimates
- id (=): 1

Existing indexes
- id PRIMARY
- id, user_id PRIMARY
- ancestry
- ancestry text_pattern_ops
- ancestry varchar_pattern_ops
- anki_deck_id
- category_id
- cloned_from_id
- deck_import_id
- deleted_by_user_at, user_id
- id, state
- library_deck_id
- public_state, visibility
- sharing_token varchar_pattern_ops UNIQUE
- state
- user_id
- user_id
247 min 0.3% 16 ms 932,043 ankipro
SELECT "v2"."decks"."id", "v2"."decks"."deck_collaborators_count", "v2"."decks"."deleted_by_user_at", "v2"."decks"."downvotes", "v2"."decks"."import_error_message", "v2"."decks"."name", "v2"."decks"."last_reset_at", "v2"."decks"."public_state", "v2"."decks"."sharing_token", "v2"."decks"."state", "v2"."decks"."visibility", "v2"."decks"."upvotes", "v2"."decks"."user_id", "v2"."decks"."created_at", "v2"."decks"."updated_at", "v2"."decks"."ancestry", "v2"."decks"."slug", "v2"."decks"."seo_description", "v2"."decks"."description", "v2"."decks"."category", "v2"."decks"."cloned_times_count", "v2"."decks"."is_indexable", "v2"."decks"."study_score", "v2"."decks"."library_deck_id", "v2"."decks"."file_hash", "v2"."decks"."cloned_from_id", "v2"."decks"."anki_deck_id", "v2"."decks"."studiers_count", "v2"."decks"."deck_id", "v2"."decks"."moved_at", "v2"."decks"."source", "v2"."decks"."reviews_count", "v2"."decks"."duplicated_from_id", "v2"."decks"."no_cards_limit", "v2"."decks"."category_id" FROM "v2"."decks" WHERE "v2"."decks"."public_state" = $1 AND "v2"."decks"."ancestry" = $2 AND "v2"."decks"."visibility" IN ($3, $4) AND "v2"."decks"."slug" IS NOT NULL AND "v2"."decks"."library_deck_id" = $5 LIMIT $6
243 min 0.3% 1 ms 25,479,606 ankipro
UPDATE "v2"."deck_counters" SET "recalculate_at" = $1, "updated_at" = $2 WHERE "v2"."deck_counters"."id" = $3 AND "v2"."deck_counters"."deck_id" = $4
Covered by index on (id)
Rows: 40273848
Row progression: 40273848, 1

Row estimates
- id (=): 1
- deck_id (=): 1

Existing indexes
- id PRIMARY
- id, deck_id PRIMARY
- deck_id
- deck_id, user_id UNIQUE
- user_id
- user_id
230 min 0.3% 52 ms 267,404 ankipro
WITH subtree_decks AS ( SELECT id, ancestry FROM v2.decks WHERE (id IN ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12) OR ancestry LIKE $13 OR ancestry LIKE $14 OR ancestry LIKE $15 OR ancestry LIKE $16 OR ancestry LIKE $17 OR ancestry LIKE $18 OR ancestry LIKE $19 OR ancestry LIKE $20 OR ancestry LIKE $21 OR ancestry LIKE $22 OR ancestry LIKE $23 OR ancestry LIKE $24) AND state NOT IN ($25,$26,$27) ), min_next_reviews AS ( SELECT deck_id, MIN(next_review_at) AS min_next_review_at FROM v2.card_progresses WHERE deck_id IN (SELECT id FROM subtree_decks) AND user_id = $28 AND frozen = $29 GROUP BY deck_id ) SELECT sd.id AS deck_id, sd.ancestry, mn.min_next_review_at FROM subtree_decks sd LEFT JOIN min_next_reviews mn ON sd.id = mn.deck_id
223 min 0.3% 112 ms 119,244 ankipro
SELECT "v2"."notes"."id", "v2"."notes"."template_kind", "v2"."notes"."fields", "v2"."notes"."cards_count", "v2"."notes"."deck_id", "v2"."notes"."created_at", "v2"."notes"."updated_at", "v2"."notes"."library_note_id", "v2"."notes"."library_card_id", "v2"."notes"."anki_id", "v2"."notes"."css" FROM "v2"."notes" WHERE "v2"."notes"."deck_id" = $1 ORDER BY "v2"."notes"."id" ASC LIMIT $2
215 min 0.3% 1 ms 24,896,416 ankipro
UPDATE "v2"."deck_counters" SET "reviewed_today_count" = $1, "recalculate_at" = $2, "to_learn_today_count" = $3, "updated_at" = $4 WHERE "v2"."deck_counters"."id" = $5 AND "v2"."deck_counters"."deck_id" = $6
Covered by index on (id)
Rows: 40273848
Row progression: 40273848, 1

Row estimates
- id (=): 1
- deck_id (=): 1

Existing indexes
- id PRIMARY
- id, deck_id PRIMARY
- deck_id
- deck_id, user_id UNIQUE
- user_id
- user_id
212 min 0.3% 16 ms 780,373 ankipro
SELECT "v2"."decks"."id" AS t0_r0, "v2"."decks"."deck_collaborators_count" AS t0_r1, "v2"."decks"."deleted_by_user_at" AS t0_r2, "v2"."decks"."downvotes" AS t0_r3, "v2"."decks"."import_error_message" AS t0_r4, "v2"."decks"."name" AS t0_r5, "v2"."decks"."last_reset_at" AS t0_r6, "v2"."decks"."public_state" AS t0_r7, "v2"."decks"."sharing_token" AS t0_r8, "v2"."decks"."state" AS t0_r9, "v2"."decks"."visibility" AS t0_r10, "v2"."decks"."upvotes" AS t0_r11, "v2"."decks"."user_id" AS t0_r12, "v2"."decks"."created_at" AS t0_r13, "v2"."decks"."updated_at" AS t0_r14, "v2"."decks"."ancestry" AS t0_r15, "v2"."decks"."slug" AS t0_r16, "v2"."decks"."seo_description" AS t0_r17, "v2"."decks"."description" AS t0_r18, "v2"."decks"."category" AS t0_r19, "v2"."decks"."cloned_times_count" AS t0_r20, "v2"."decks"."is_indexable" AS t0_r21, "v2"."decks"."study_score" AS t0_r22, "v2"."decks"."library_deck_id" AS t0_r23, "v2"."decks"."file_hash" AS t0_r24, "v2"."decks"."cloned_from_id" AS t0_r25, "v2"."decks"."anki_deck_id" AS t0_r26, "v2"."decks"."studiers_count" AS t0_r27, "v2"."decks"."deck_id" AS t0_r28, "v2"."decks"."moved_at" AS t0_r29, "v2"."decks"."source" AS t0_r30, "v2"."decks"."reviews_count" AS t0_r31, "v2"."decks"."duplicated_from_id" AS t0_r32, "v2"."decks"."no_cards_limit" AS t0_r33, "v2"."decks"."category_id" AS t0_r34, "v2"."deck_settings"."id" AS t1_r0, "v2"."deck_settings"."algorithm_preset" AS t1_r1, "v2"."deck_settings"."deck_id" AS t1_r2, "v2"."deck_settings"."easy_interval_minutes" AS t1_r3, "v2"."deck_settings"."easy_bonus_percent" AS t1_r4, "v2"."deck_settings"."font_settings" AS t1_r5, "v2"."deck_settings"."graduated_interval_minutes" AS t1_r6, "v2"."deck_settings"."interval_modifier_percent" AS t1_r7, "v2"."deck_settings"."last_sync_at" AS t1_r8, "v2"."deck_settings"."library_sharing" AS t1_r9, "v2"."deck_settings"."new_cards_per_day" AS t1_r10, "v2"."deck_settings"."reverse_mode" AS t1_r11, "v2"."deck_settings"."offline_mode" AS t1_r12, "v2"."deck_settings"."sharing" AS t1_r13, "v2"."deck_settings"."steps_in_minutes" AS t1_r14, "v2"."deck_settings"."shuffle_mode" AS t1_r15, "v2"."deck_settings"."tts_autoplay" AS t1_r16, "v2"."deck_settings"."tts" AS t1_r17, "v2"."deck_settings"."tts_back_side_language" AS t1_r18, "v2"."deck_settings"."tts_front_side_language" AS t1_r19, "v2"."deck_settings"."user_id" AS t1_r20, "v2"."deck_settings"."created_at" AS t1_r21, "v2"."deck_settings"."updated_at" AS t1_r22, "v2"."deck_settings"."position" AS t1_r23, "v2"."deck_settings"."tts_whole_card_pronunciation" AS t1_r24, "v2"."deck_settings"."state" AS t1_r25, "v2"."deck_settings"."max_cards_per_day" AS t1_r26, "v2"."deck_settings"."card_preset_id" AS t1_r27, "v2"."deck_settings"."max_interval_minutes" AS t1_r28, "v2"."deck_settings"."tts_speed" AS t1_r29, "v2"."deck_settings"."tts_slower_replay" AS t1_r30, "v2"."deck_settings"."folder_id" AS t1_r31, "v2"."deck_counters"."id" AS t2_r0, "v2"."deck_counters"."deck_id" AS t2_r1, "v2"."deck_counters"."got_it_count" AS t2_r2, "v2"."deck_counters"."graduated_count" AS t2_r3, "v2"."deck_counters"."frozen_count" AS t2_r4, "v2"."deck_counters"."learning_count" AS t2_r5, "v2"."deck_counters"."new_count" AS t2_r6, "v2"."deck_counters"."presented_count" AS t2_r7, "v2"."deck_counters"."reviewed_today_count" AS t2_r8, "v2"."deck_counters"."recalculate_at" AS t2_r9, "v2"."deck_counters"."study_again_count" AS t2_r10, "v2"."deck_counters"."to_learn_today_count" AS t2_r11, "v2"."deck_counters"."to_review_count" AS t2_r12, "v2"."deck_counters"."total_new_count" AS t2_r13, "v2"."deck_counters"."user_id" AS t2_r14, "v2"."deck_counters"."created_at" AS t2_r15, "v2"."deck_counters"."updated_at" AS t2_r16, "v2"."deck_counters"."total_not_learned_count" AS t2_r17, "v2"."deck_counters"."offline_available_count" AS t2_r18, "v2"."deck_counters"."learning_total_count" AS t2_r19, "v2"."deck_counters"."graduated_total_count" AS t2_r20 FROM "v2"."decks" INNER JOIN "v2"."deck_settings" ON "v2"."deck_settings"."deck_id" = "v2"."decks"."id" INNER JOIN "v2"."deck_counters" ON "v2"."deck_counters"."deck_id" = "v2"."decks"."id" WHERE ("v2"."decks"."ancestry" LIKE $1 OR "v2"."decks"."id" = $2) AND "v2"."decks"."state" != $3 AND (v2.deck_settings.user_id = $4 AND v2.deck_counters.user_id = $5)
209 min 0.3% 22 ms 574,330 ankipro
WITH cte AS ( SELECT id, deck_id, (sum(v2.notes.cards_count) over (order by v2.notes.id)) AS custom_offset FROM v2.notes WHERE $1=$2 AND v2.notes.id IN ($3,$4,$5) ORDER BY id ASC LIMIT $6 ) SELECT * FROM v2.notes AS notes INNER JOIN cte AS c ON c.id = notes.id AND c.deck_id = notes.deck_id AND c.custom_offset > $7 WHERE $8=$9 ORDER BY notes.id ASC LIMIT $10
208 min 0.3% 6 ms 2,169,901 ankipro
SELECT "v2"."note_attachments"."id", "v2"."note_attachments"."note_id", "v2"."note_attachments"."deck_id", "v2"."note_attachments"."attachment_id", "v2"."note_attachments"."kind", "v2"."note_attachments"."created_at", "v2"."note_attachments"."updated_at", "v2"."note_attachments"."field_name" FROM "v2"."note_attachments" WHERE "v2"."note_attachments"."note_id" IN ($1, $2, $3)
205 min 0.3% 6 ms 2,187,591 ankipro
SELECT "v2"."note_attachments"."id", "v2"."note_attachments"."note_id", "v2"."note_attachments"."deck_id", "v2"."note_attachments"."attachment_id", "v2"."note_attachments"."kind", "v2"."note_attachments"."created_at", "v2"."note_attachments"."updated_at", "v2"."note_attachments"."field_name" FROM "v2"."note_attachments" WHERE "v2"."note_attachments"."note_id" IN ($1, $2)
201 min 0.3% 3 ms 4,731,838 ankipro
SELECT * FROM v2.notes WHERE deck_id IN ($1) AND TRIM( REGEXP_REPLACE( REGEXP_REPLACE( LOWER(notes.fields->>$2), $3, $4, $5 ), $6, $7, $8 ) ) = LOWER(TRIM($9)) ORDER BY id ASC
200 min 0.3% 53 ms 227,420 ankipro
WITH subtree_decks AS ( SELECT id, ancestry FROM v2.decks WHERE (id IN ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13) OR ancestry LIKE $14 OR ancestry LIKE $15 OR ancestry LIKE $16 OR ancestry LIKE $17 OR ancestry LIKE $18 OR ancestry LIKE $19 OR ancestry LIKE $20 OR ancestry LIKE $21 OR ancestry LIKE $22 OR ancestry LIKE $23 OR ancestry LIKE $24 OR ancestry LIKE $25 OR ancestry LIKE $26) AND state NOT IN ($27,$28,$29) ), min_next_reviews AS ( SELECT deck_id, MIN(next_review_at) AS min_next_review_at FROM v2.card_progresses WHERE deck_id IN (SELECT id FROM subtree_decks) AND user_id = $30 AND frozen = $31 GROUP BY deck_id ) SELECT sd.id AS deck_id, sd.ancestry, mn.min_next_review_at FROM subtree_decks sd LEFT JOIN min_next_reviews mn ON sd.id = mn.deck_id
195 min 0.2% 138 ms 84,583 ankipro
WITH cte AS ( SELECT id, deck_id, (sum(v2.notes.cards_count) over (order by v2.notes.id)) AS custom_offset FROM v2.notes WHERE $1=$2 AND v2.notes.deck_id IN ($3) ORDER BY id ASC LIMIT $4 ) SELECT * FROM v2.notes AS notes INNER JOIN cte AS c ON c.id = notes.id AND c.deck_id = notes.deck_id AND c.custom_offset > $5 WHERE $6=$7 ORDER BY notes.id ASC LIMIT $8
187 min 0.2% 55 ms 204,897 ankipro
WITH subtree_decks AS ( SELECT id, ancestry FROM v2.decks WHERE (id IN ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14) OR ancestry LIKE $15 OR ancestry LIKE $16 OR ancestry LIKE $17 OR ancestry LIKE $18 OR ancestry LIKE $19 OR ancestry LIKE $20 OR ancestry LIKE $21 OR ancestry LIKE $22 OR ancestry LIKE $23 OR ancestry LIKE $24 OR ancestry LIKE $25 OR ancestry LIKE $26 OR ancestry LIKE $27 OR ancestry LIKE $28) AND state NOT IN ($29,$30,$31) ), min_next_reviews AS ( SELECT deck_id, MIN(next_review_at) AS min_next_review_at FROM v2.card_progresses WHERE deck_id IN (SELECT id FROM subtree_decks) AND user_id = $32 AND frozen = $33 GROUP BY deck_id ) SELECT sd.id AS deck_id, sd.ancestry, mn.min_next_review_at FROM subtree_decks sd LEFT JOIN min_next_reviews mn ON sd.id = mn.deck_id
184 min 0.2% 59 ms 185,952 ankipro
WITH subtree_decks AS ( SELECT id, ancestry FROM v2.decks WHERE (id IN ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15) OR ancestry LIKE $16 OR ancestry LIKE $17 OR ancestry LIKE $18 OR ancestry LIKE $19 OR ancestry LIKE $20 OR ancestry LIKE $21 OR ancestry LIKE $22 OR ancestry LIKE $23 OR ancestry LIKE $24 OR ancestry LIKE $25 OR ancestry LIKE $26 OR ancestry LIKE $27 OR ancestry LIKE $28 OR ancestry LIKE $29 OR ancestry LIKE $30) AND state NOT IN ($31,$32,$33) ), min_next_reviews AS ( SELECT deck_id, MIN(next_review_at) AS min_next_review_at FROM v2.card_progresses WHERE deck_id IN (SELECT id FROM subtree_decks) AND user_id = $34 AND frozen = $35 GROUP BY deck_id ) SELECT sd.id AS deck_id, sd.ancestry, mn.min_next_review_at FROM subtree_decks sd LEFT JOIN min_next_reviews mn ON sd.id = mn.deck_id
182 min 0.2% 0 ms 168,261,241 ankipro
SELECT "streaks"."id", "streaks"."duration", "streaks"."end_date", "streaks"."days_until_next_freeze" FROM "streaks" WHERE "streaks"."user_id" = $1
Covered by index on (user_id)
Rows: 4036047
Row progression: 4036047, 11

Row estimates
- user_id (=): 11

Existing indexes
- id PRIMARY
- user_id
- user_id, daterange(start_date, end_date, '[)'::text) GIST
- user_id WHERE end_date IS NULL UNIQUE
181 min 0.2% 1 ms 10,201,792 ankipro
SELECT "v2"."decks"."id" AS t0_r0, "v2"."decks"."deck_collaborators_count" AS t0_r1, "v2"."decks"."deleted_by_user_at" AS t0_r2, "v2"."decks"."downvotes" AS t0_r3, "v2"."decks"."import_error_message" AS t0_r4, "v2"."decks"."name" AS t0_r5, "v2"."decks"."last_reset_at" AS t0_r6, "v2"."decks"."public_state" AS t0_r7, "v2"."decks"."sharing_token" AS t0_r8, "v2"."decks"."state" AS t0_r9, "v2"."decks"."visibility" AS t0_r10, "v2"."decks"."upvotes" AS t0_r11, "v2"."decks"."user_id" AS t0_r12, "v2"."decks"."created_at" AS t0_r13, "v2"."decks"."updated_at" AS t0_r14, "v2"."decks"."ancestry" AS t0_r15, "v2"."decks"."slug" AS t0_r16, "v2"."decks"."seo_description" AS t0_r17, "v2"."decks"."description" AS t0_r18, "v2"."decks"."category" AS t0_r19, "v2"."decks"."cloned_times_count" AS t0_r20, "v2"."decks"."is_indexable" AS t0_r21, "v2"."decks"."study_score" AS t0_r22, "v2"."decks"."library_deck_id" AS t0_r23, "v2"."decks"."file_hash" AS t0_r24, "v2"."decks"."cloned_from_id" AS t0_r25, "v2"."decks"."anki_deck_id" AS t0_r26, "v2"."decks"."studiers_count" AS t0_r27, "v2"."decks"."deck_id" AS t0_r28, "v2"."decks"."moved_at" AS t0_r29, "v2"."decks"."source" AS t0_r30, "v2"."decks"."reviews_count" AS t0_r31, "v2"."decks"."duplicated_from_id" AS t0_r32, "v2"."decks"."no_cards_limit" AS t0_r33, "v2"."decks"."category_id" AS t0_r34, "v2"."deck_settings"."id" AS t1_r0, "v2"."deck_settings"."algorithm_preset" AS t1_r1, "v2"."deck_settings"."deck_id" AS t1_r2, "v2"."deck_settings"."easy_interval_minutes" AS t1_r3, "v2"."deck_settings"."easy_bonus_percent" AS t1_r4, "v2"."deck_settings"."font_settings" AS t1_r5, "v2"."deck_settings"."graduated_interval_minutes" AS t1_r6, "v2"."deck_settings"."interval_modifier_percent" AS t1_r7, "v2"."deck_settings"."last_sync_at" AS t1_r8, "v2"."deck_settings"."library_sharing" AS t1_r9, "v2"."deck_settings"."new_cards_per_day" AS t1_r10, "v2"."deck_settings"."reverse_mode" AS t1_r11, "v2"."deck_settings"."offline_mode" AS t1_r12, "v2"."deck_settings"."sharing" AS t1_r13, "v2"."deck_settings"."steps_in_minutes" AS t1_r14, "v2"."deck_settings"."shuffle_mode" AS t1_r15, "v2"."deck_settings"."tts_autoplay" AS t1_r16, "v2"."deck_settings"."tts" AS t1_r17, "v2"."deck_settings"."tts_back_side_language" AS t1_r18, "v2"."deck_settings"."tts_front_side_language" AS t1_r19, "v2"."deck_settings"."user_id" AS t1_r20, "v2"."deck_settings"."created_at" AS t1_r21, "v2"."deck_settings"."updated_at" AS t1_r22, "v2"."deck_settings"."position" AS t1_r23, "v2"."deck_settings"."tts_whole_card_pronunciation" AS t1_r24, "v2"."deck_settings"."state" AS t1_r25, "v2"."deck_settings"."max_cards_per_day" AS t1_r26, "v2"."deck_settings"."card_preset_id" AS t1_r27, "v2"."deck_settings"."max_interval_minutes" AS t1_r28, "v2"."deck_settings"."tts_speed" AS t1_r29, "v2"."deck_settings"."tts_slower_replay" AS t1_r30, "v2"."deck_settings"."folder_id" AS t1_r31, "v2"."deck_counters"."id" AS t2_r0, "v2"."deck_counters"."deck_id" AS t2_r1, "v2"."deck_counters"."got_it_count" AS t2_r2, "v2"."deck_counters"."graduated_count" AS t2_r3, "v2"."deck_counters"."frozen_count" AS t2_r4, "v2"."deck_counters"."learning_count" AS t2_r5, "v2"."deck_counters"."new_count" AS t2_r6, "v2"."deck_counters"."presented_count" AS t2_r7, "v2"."deck_counters"."reviewed_today_count" AS t2_r8, "v2"."deck_counters"."recalculate_at" AS t2_r9, "v2"."deck_counters"."study_again_count" AS t2_r10, "v2"."deck_counters"."to_learn_today_count" AS t2_r11, "v2"."deck_counters"."to_review_count" AS t2_r12, "v2"."deck_counters"."total_new_count" AS t2_r13, "v2"."deck_counters"."user_id" AS t2_r14, "v2"."deck_counters"."created_at" AS t2_r15, "v2"."deck_counters"."updated_at" AS t2_r16, "v2"."deck_counters"."total_not_learned_count" AS t2_r17, "v2"."deck_counters"."offline_available_count" AS t2_r18, "v2"."deck_counters"."learning_total_count" AS t2_r19, "v2"."deck_counters"."graduated_total_count" AS t2_r20 FROM "v2"."decks" INNER JOIN "v2"."deck_settings" ON "v2"."deck_settings"."deck_id" = "v2"."decks"."id" INNER JOIN "v2"."deck_counters" ON "v2"."deck_counters"."deck_id" = "v2"."decks"."id" WHERE "v2"."decks"."public_state" = $1 AND "v2"."decks"."id" = $2 AND (v2.deck_settings.user_id = $3 AND v2.deck_counters.user_id = $4) ORDER BY v2.deck_settings.position ASC, COALESCE(v2.decks.moved_at, v2.decks.created_at) DESC
179 min 0.2% 0 ms 1,221,687,010 ankipro
SET application_name='/home/application/bundle/ruby/3.4.0/bin/rake'
172 min 0.2% 1 ms 9,290,273 ankipro
SELECT "v2"."card_progresses"."note_id", "v2"."card_progresses"."next_review_at", "v2"."card_progresses"."learning_state", "v2"."card_progresses"."frozen", "v2"."card_progresses"."ordinal" FROM "v2"."card_progresses" WHERE "v2"."card_progresses"."deck_id" = $1 AND "v2"."card_progresses"."note_id" IN ($2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21) AND "v2"."card_progresses"."user_id" = $22
Covered by index on (note_id)
Rows: 112947160
Row progression: 112947160, 0

Row estimates
- note_id (=): 0
- deck_id (=): 274
- user_id (=): 773

Existing indexes
- id PRIMARY
- id, deck_id PRIMARY
- deck_id
- deck_id, id
- deck_id, user_id, note_id
- library_card_id
- library_note_id
- note_id
- user_id
- user_id, frozen
- user_id, id
- user_id, note_id
165 min 0.2% 0 ms 1,235,476,396 ankipro
SET application_name='/home/application/bundle/ruby/3.4.0/bin/pitchfork'
164 min 0.2% 5 ms 1,890,632 ankipro
INSERT INTO "v2"."notes" ("id","template_kind","fields","cards_count","deck_id","created_at","updated_at","library_note_id","library_card_id","anki_id","css") VALUES (nextval($1),$2,$3,$4,$5,$6,$7,$8,$9,$10,$11),(nextval($12),$13,$14,$15,$16,$17,$18,$19,$20,$21,$22),(nextval($23),$24,$25,$26,$27,$28,$29,$30,$31,$32,$33),(nextval($34),$35,$36,$37,$38,$39,$40,$41,$42,$43,$44),(nextval($45),$46,$47,$48,$49,$50,$51,$52,$53,$54,$55),(nextval($56),$57,$58,$59,$60,$61,$62,$63,$64,$65,$66),(nextval($67),$68,$69,$70,$71,$72,$73,$74,$75,$76,$77),(nextval($78),$79,$80,$81,$82,$83,$84,$85,$86,$87,$88),(nextval($89),$90,$91,$92,$93,$94,$95,$96,$97,$98,$99),(nextval($100),$101,$102,$103,$104,$105,$106,$107,$108,$109,$110),(nextval($111),$112,$113,$114,$115,$116,$117,$118,$119,$120,$121),(nextval($122),$123,$124,$125,$126,$127,$128,$129,$130,$131,$132),(nextval($133),$134,$135,$136,$137,$138,$139,$140,$141,$142,$143),(nextval($144),$145,$146,$147,$148,$149,$150,$151,$152,$153,$154),(nextval($155),$156,$157,$158,$159,$160,$161,$162,$163,$164,$165),(nextval($166),$167,$168,$169,$170,$171,$172,$173,$174,$175,$176),(nextval($177),$178,$179,$180,$181,$182,$183,$184,$185,$186,$187),(nextval($188),$189,$190,$191,$192,$193,$194,$195,$196,$197,$198),(nextval($199),$200,$201,$202,$203,$204,$205,$206,$207,$208,$209),(nextval($210),$211,$212,$213,$214,$215,$216,$217,$218,$219,$220),(nextval($221),$222,$223,$224,$225,$226,$227,$228,$229,$230,$231),(nextval($232),$233,$234,$235,$236,$237,$238,$239,$240,$241,$242),(nextval($243),$244,$245,$246,$247,$248,$249,$250,$251,$252,$253),(nextval($254),$255,$256,$257,$258,$259,$260,$261,$262,$263,$264),(nextval($265),$266,$267,$268,$269,$270,$271,$272,$273,$274,$275),(nextval($276),$277,$278,$279,$280,$281,$282,$283,$284,$285,$286),(nextval($287),$288,$289,$290,$291,$292,$293,$294,$295,$296,$297),(nextval($298),$299,$300,$301,$302,$303,$304,$305,$306,$307,$308),(nextval($309),$310,$311,$312,$313,$314,$315,$316,$317,$318,$319),(nextval($320),$321,$322,$323,$324,$325,$326,$327,$328,$329,$330),(nextval($331),$332,$333,$334,$335,$336,$337,$338,$339,$340,$341),(nextval($342),$343,$344,$345,$346,$347,$348,$349,$350,$351,$352),(nextval($353),$354,$355,$356,$357,$358,$359,$360,$361,$362,$363),(nextval($364),$365,$366,$367,$368,$369,$370,$371,$372,$373,$374),(nextval($375),$376,$377,$378,$379,$380,$381,$382,$383,$384,$385),(nextval($386),$387,$388,$389,$390,$391,$392,$393,$394,$395,$396),(nextval($397),$398,$399,$400,$401,$402,$403,$404,$405,$406,$407),(nextval($408),$409,$410,$411,$412,$413,$414,$415,$416,$417,$418),(nextval($419),$420,$421,$422,$423,$424,$425,$426,$427,$428,$429),(nextval($430),$431,$432,$433,$434,$435,$436,$437,$438,$439,$440),(nextval($441),$442,$443,$444,$445,$446,$447,$448,$449,$450,$451),(nextval($452),$453,$454,$455,$456,$457,$458,$459,$460,$461,$462),(nextval($463),$464,$465,$466,$467,$468,$469,$470,$471,$472,$473),(nextval($474),$475,$476,$477,$478,$479,$480,$481,$482,$483,$484),(nextval($485),$486,$487,$488,$489,$490,$491,$492,$493,$494,$495),(nextval($496),$497,$498,$499,$500,$501,$502,$503,$504,$505,$506),(nextval($507),$508,$509,$510,$511,$512,$513,$514,$515,$516,$517),(nextval($518),$519,$520,$521,$522,$523,$524,$525,$526,$527,$528),(nextval($529),$530,$531,$532,$533,$534,$535,$536,$537,$538,$539),(nextval($540),$541,$542,$543,$544,$545,$546,$547,$548,$549,$550) RETURNING "id"
163 min 0.2% 1 ms 17,078,682 ankipro
UPDATE "v2"."deck_counters" SET "recalculate_at" = $1 WHERE "v2"."deck_counters"."id" = $2 AND "v2"."deck_counters"."deck_id" = $3
Covered by index on (id)
Rows: 40273848
Row progression: 40273848, 1

Row estimates
- id (=): 1
- deck_id (=): 1

Existing indexes
- id PRIMARY
- id, deck_id PRIMARY
- deck_id
- deck_id, user_id UNIQUE
- user_id
- user_id
160 min 0.2% 0 ms 1,411,117,532 ankipro
SELECT $1 AS one FROM "solid_queue_ready_executions" WHERE "solid_queue_ready_executions"."queue_name" = $2 LIMIT $3 FOR UPDATE SKIP LOCKED
157 min 0.2% 21 ms 440,691 ankipro
WITH cte AS ( SELECT id, deck_id, (sum(v2.notes.cards_count) over (order by v2.notes.id)) AS custom_offset FROM v2.notes WHERE $1=$2 AND v2.notes.id IN ($3,$4) ORDER BY id ASC LIMIT $5 ) SELECT * FROM v2.notes AS notes INNER JOIN cte AS c ON c.id = notes.id AND c.deck_id = notes.deck_id AND c.custom_offset > $6 WHERE $7=$8 ORDER BY notes.id ASC LIMIT $9
156 min 0.2% 1 ms 8,524,868 ankipro
SELECT "v2"."card_progresses"."id", "v2"."card_progresses"."ease_factor", "v2"."card_progresses"."frozen", "v2"."card_progresses"."interval", "v2"."card_progresses"."learning_state", "v2"."card_progresses"."learning_steps_index", "v2"."card_progresses"."next_review_at", "v2"."card_progresses"."ordinal", "v2"."card_progresses"."raw_next_review_at", "v2"."card_progresses"."to_learn_in_current_sl_round", "v2"."card_progresses"."note_id", "v2"."card_progresses"."user_id", "v2"."card_progresses"."created_at", "v2"."card_progresses"."updated_at", "v2"."card_progresses"."fetch_priority", "v2"."card_progresses"."deck_id", "v2"."card_progresses"."undo_data" FROM "v2"."card_progresses" WHERE "v2"."card_progresses"."id" IN ($1, $2, $3, $4, $5, $6, $7) AND "v2"."card_progresses"."deck_id" = $8 AND "v2"."card_progresses"."frozen" = $9
Covered by index on (id)
Rows: 112947160
Row progression: 112947160, 1

Row estimates
- id (=): 1
- deck_id (=): 274
- frozen (=): 56473580

Existing indexes
- id PRIMARY
- id, deck_id PRIMARY
- deck_id
- deck_id, id
- deck_id, user_id, note_id
- library_card_id
- library_note_id
- note_id
- user_id
- user_id, frozen
- user_id, id
- user_id, note_id
155 min 0.2% 74 ms 125,133 ankipro
SELECT DISTINCT "users"."id" AS alias_0, "users"."id" FROM "users" LEFT OUTER JOIN "subscriptions" ON "subscriptions"."user_id" = "users"."id" WHERE "subscriptions"."expires_at" < $1 AND "users"."id" > $2 ORDER BY "users"."id" ASC LIMIT $3
153 min 0.2% 6 ms 1,506,279 ankipro
SELECT "v2"."note_attachments"."id", "v2"."note_attachments"."note_id", "v2"."note_attachments"."deck_id", "v2"."note_attachments"."attachment_id", "v2"."note_attachments"."kind", "v2"."note_attachments"."created_at", "v2"."note_attachments"."updated_at", "v2"."note_attachments"."field_name" FROM "v2"."note_attachments" WHERE "v2"."note_attachments"."note_id" IN ($1, $2, $3, $4, $5)
146 min 0.2% 0 ms 27,894,924 ankipro
SELECT "v2"."deck_counters"."id", "v2"."deck_counters"."recalculate_at", "v2"."deck_counters"."deck_id" FROM "v2"."deck_counters" WHERE "v2"."deck_counters"."deck_id" = $1 AND "v2"."deck_counters"."user_id" = $2
Covered by index on (deck_id)
Rows: 40273848
Row progression: 40273848, 1

Row estimates
- deck_id (=): 1
- user_id (=): 448

Existing indexes
- id PRIMARY
- id, deck_id PRIMARY
- deck_id
- deck_id, user_id UNIQUE
- user_id
- user_id
136 min 0.2% 57 ms 141,793 ankipro
WITH subtree_decks AS ( SELECT id, ancestry FROM v2.decks WHERE (id IN ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16) OR ancestry LIKE $17 OR ancestry LIKE $18 OR ancestry LIKE $19 OR ancestry LIKE $20 OR ancestry LIKE $21 OR ancestry LIKE $22 OR ancestry LIKE $23 OR ancestry LIKE $24 OR ancestry LIKE $25 OR ancestry LIKE $26 OR ancestry LIKE $27 OR ancestry LIKE $28 OR ancestry LIKE $29 OR ancestry LIKE $30 OR ancestry LIKE $31 OR ancestry LIKE $32) AND state NOT IN ($33,$34,$35) ), min_next_reviews AS ( SELECT deck_id, MIN(next_review_at) AS min_next_review_at FROM v2.card_progresses WHERE deck_id IN (SELECT id FROM subtree_decks) AND user_id = $36 AND frozen = $37 GROUP BY deck_id ) SELECT sd.id AS deck_id, sd.ancestry, mn.min_next_review_at FROM subtree_decks sd LEFT JOIN min_next_reviews mn ON sd.id = mn.deck_id
134 min 0.2% 1 ms 5,484,406 ankipro
SELECT "v2"."card_progresses"."id" FROM "v2"."card_progresses" WHERE "v2"."card_progresses"."deck_id" = $1 AND "v2"."card_progresses"."user_id" = $2 AND "v2"."card_progresses"."frozen" = $3 AND (v2.card_progresses.next_review_at <= $4 OR v2.card_progresses.next_review_at IS NULL) AND (v2.card_progresses.to_learn_in_current_sl_round = $5 OR v2.card_progresses.to_learn_in_current_sl_round IS NULL) AND (v2.card_progresses.id IN ($6,$7,$8)) ORDER BY CASE v2.card_progresses.learning_state WHEN $9 THEN $10 WHEN $11 THEN $12 ELSE $13 END ASC, CASE WHEN v2.card_progresses.fetch_priority = $14 THEN $15 ELSE $16 END, RANDOM() LIMIT $17
134 min 0.2% 0 ms 20,203,678 ankipro
SELECT "v2"."deck_settings"."id", "v2"."deck_settings"."algorithm_preset", "v2"."deck_settings"."deck_id", "v2"."deck_settings"."easy_interval_minutes", "v2"."deck_settings"."easy_bonus_percent", "v2"."deck_settings"."font_settings", "v2"."deck_settings"."graduated_interval_minutes", "v2"."deck_settings"."interval_modifier_percent", "v2"."deck_settings"."last_sync_at", "v2"."deck_settings"."library_sharing", "v2"."deck_settings"."new_cards_per_day", "v2"."deck_settings"."reverse_mode", "v2"."deck_settings"."offline_mode", "v2"."deck_settings"."sharing", "v2"."deck_settings"."steps_in_minutes", "v2"."deck_settings"."shuffle_mode", "v2"."deck_settings"."tts_autoplay", "v2"."deck_settings"."tts", "v2"."deck_settings"."tts_back_side_language", "v2"."deck_settings"."tts_front_side_language", "v2"."deck_settings"."user_id", "v2"."deck_settings"."created_at", "v2"."deck_settings"."updated_at", "v2"."deck_settings"."position", "v2"."deck_settings"."tts_whole_card_pronunciation", "v2"."deck_settings"."state", "v2"."deck_settings"."max_cards_per_day", "v2"."deck_settings"."card_preset_id", "v2"."deck_settings"."max_interval_minutes", "v2"."deck_settings"."tts_speed", "v2"."deck_settings"."tts_slower_replay", "v2"."deck_settings"."folder_id" FROM "v2"."deck_settings" WHERE "v2"."deck_settings"."deck_id" = $1 AND "v2"."deck_settings"."user_id" = $2
Covered by index on (deck_id)
Rows: 40345728
Row progression: 40345728, 1

Row estimates
- deck_id (=): 1
- user_id (=): 170

Existing indexes
- id PRIMARY
- id, deck_id PRIMARY
- deck_id
- deck_id
- folder_id
- user_id
- user_id
133 min 0.2% 0 ms 23,085,180 ankipro
SELECT "v2"."notes"."id", "v2"."notes"."deck_id" FROM "v2"."notes" WHERE "v2"."notes"."deck_id" = $1 AND "v2"."notes"."id" = $2 LIMIT $3
132 min 0.2% 1 ms 5,493,715 ankipro
SELECT "v2"."card_progresses"."id" FROM "v2"."card_progresses" WHERE "v2"."card_progresses"."deck_id" = $1 AND "v2"."card_progresses"."user_id" = $2 AND "v2"."card_progresses"."frozen" = $3 AND (v2.card_progresses.next_review_at <= $4 OR v2.card_progresses.next_review_at IS NULL) AND (v2.card_progresses.to_learn_in_current_sl_round = $5 OR v2.card_progresses.to_learn_in_current_sl_round IS NULL) AND (learning_state IN ($6,$7,$8)) AND (v2.card_progresses.id NOT IN ($9,$10,$11)) ORDER BY CASE v2.card_progresses.learning_state WHEN $12 THEN $13 WHEN $14 THEN $15 ELSE $16 END ASC, CASE WHEN v2.card_progresses.fetch_priority = $17 THEN $18 ELSE $19 END, RANDOM() LIMIT $20
132 min 0.2% 1 ms 8,419,838 ankipro
SELECT "v2"."notes"."id", "v2"."notes"."template_kind", "v2"."notes"."fields", "v2"."notes"."cards_count", "v2"."notes"."deck_id", "v2"."notes"."created_at", "v2"."notes"."updated_at", "v2"."notes"."library_note_id", "v2"."notes"."library_card_id", "v2"."notes"."anki_id", "v2"."notes"."css" FROM "v2"."notes" WHERE "v2"."notes"."id" IN ($1, $2, $3, $4, $5, $6, $7) AND "v2"."notes"."deck_id" = $8
129 min 0.2% 60 ms 128,448 ankipro
WITH subtree_decks AS ( SELECT id, ancestry FROM v2.decks WHERE (id IN ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17) OR ancestry LIKE $18 OR ancestry LIKE $19 OR ancestry LIKE $20 OR ancestry LIKE $21 OR ancestry LIKE $22 OR ancestry LIKE $23 OR ancestry LIKE $24 OR ancestry LIKE $25 OR ancestry LIKE $26 OR ancestry LIKE $27 OR ancestry LIKE $28 OR ancestry LIKE $29 OR ancestry LIKE $30 OR ancestry LIKE $31 OR ancestry LIKE $32 OR ancestry LIKE $33 OR ancestry LIKE $34) AND state NOT IN ($35,$36,$37) ), min_next_reviews AS ( SELECT deck_id, MIN(next_review_at) AS min_next_review_at FROM v2.card_progresses WHERE deck_id IN (SELECT id FROM subtree_decks) AND user_id = $38 AND frozen = $39 GROUP BY deck_id ) SELECT sd.id AS deck_id, sd.ancestry, mn.min_next_review_at FROM subtree_decks sd LEFT JOIN min_next_reviews mn ON sd.id = mn.deck_id
126 min 0.2% 1 ms 6,353,667 ankipro
SELECT COUNT(*) FROM "v2"."notes" WHERE "v2"."notes"."deck_id" = $1
120 min 0.2% 0 ms 152,187,860 ankipro
SELECT "users"."id", "users"."analytics_id", "users"."uid", "users"."apple_auth", "users"."timezone_offset", "users"."created_at", "users"."updated_at", "users"."onboarding_data", "users"."experiments", "users"."locale", "users"."provider", "users"."email", "users"."password_digest", "users"."current_app_version", "users"."premium", "users"."reset_password_token", "users"."reset_password_sent_at", "users"."app_features", "users"."metadata", "users"."name", "users"."username", "users"."avatar_color", "users"."country_code", "users"."qr_token", "users"."qr_token_expires_at", "users"."last_seen_time", "users"."last_seen_ip", "users"."qon_id", "users"."stripe_customer_id", "users"."avatar", "users"."first_destroy_reminder_sent", "users"."second_destroy_reminder_sent", "users"."generated", "users"."new_architecture", "users"."state", "users"."idfa", "users"."aaid", "users"."about", "users"."funnel_fox_id", "users"."referral_code" FROM "users" WHERE "users"."id" = $1 LIMIT $2
Covered by index on (id)
Rows: 6901580
Row progression: 6901580, 1

Row estimates
- id (=): 1

Existing indexes
- id PRIMARY
- analytics_id
- analytics_id
- country_code
- email varchar_pattern_ops
- id, timezone_offset
- lower((email)::text)
- qon_id
- reset_password_token WHERE reset_password_token IS NOT NULL
- stripe_customer_id
- uid, provider UNIQUE
- username UNIQUE
120 min 0.2% 7 ms 1,070,373 ankipro
SELECT "v2"."note_attachments"."id", "v2"."note_attachments"."note_id", "v2"."note_attachments"."deck_id", "v2"."note_attachments"."attachment_id", "v2"."note_attachments"."kind", "v2"."note_attachments"."created_at", "v2"."note_attachments"."updated_at", "v2"."note_attachments"."field_name" FROM "v2"."note_attachments" WHERE "v2"."note_attachments"."note_id" IN ($1, $2, $3, $4, $5, $6)
119 min 0.1% 6 ms 1,191,452 ankipro
SELECT "v2"."note_attachments"."id", "v2"."note_attachments"."note_id", "v2"."note_attachments"."deck_id", "v2"."note_attachments"."attachment_id", "v2"."note_attachments"."kind", "v2"."note_attachments"."created_at", "v2"."note_attachments"."updated_at", "v2"."note_attachments"."field_name" FROM "v2"."note_attachments" WHERE "v2"."note_attachments"."note_id" IN ($1, $2, $3, $4)
116 min 0.1% 59 ms 117,497 ankipro
WITH subtree_decks AS ( SELECT id, ancestry FROM v2.decks WHERE (id IN ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18) OR ancestry LIKE $19 OR ancestry LIKE $20 OR ancestry LIKE $21 OR ancestry LIKE $22 OR ancestry LIKE $23 OR ancestry LIKE $24 OR ancestry LIKE $25 OR ancestry LIKE $26 OR ancestry LIKE $27 OR ancestry LIKE $28 OR ancestry LIKE $29 OR ancestry LIKE $30 OR ancestry LIKE $31 OR ancestry LIKE $32 OR ancestry LIKE $33 OR ancestry LIKE $34 OR ancestry LIKE $35 OR ancestry LIKE $36) AND state NOT IN ($37,$38,$39) ), min_next_reviews AS ( SELECT deck_id, MIN(next_review_at) AS min_next_review_at FROM v2.card_progresses WHERE deck_id IN (SELECT id FROM subtree_decks) AND user_id = $40 AND frozen = $41 GROUP BY deck_id ) SELECT sd.id AS deck_id, sd.ancestry, mn.min_next_review_at FROM subtree_decks sd LEFT JOIN min_next_reviews mn ON sd.id = mn.deck_id
115 min 0.1% 2 ms 3,729,292 ankipro
SELECT "v2"."attachments"."id", "v2"."attachments"."media_kind", "v2"."attachments"."height", "v2"."attachments"."width", "v2"."attachments"."media_file", "v2"."attachments"."deck_id", "v2"."attachments"."created_at", "v2"."attachments"."updated_at", "v2"."attachments"."answer_mask", "v2"."attachments"."question_mask", "v2"."attachments"."source", "v2"."attachments"."custom_file_url" FROM "v2"."attachments" WHERE "v2"."attachments"."id" = $1
112 min 0.1% 63 ms 106,160 ankipro
WITH subtree_decks AS ( SELECT id, ancestry FROM v2.decks WHERE (id IN ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19) OR ancestry LIKE $20 OR ancestry LIKE $21 OR ancestry LIKE $22 OR ancestry LIKE $23 OR ancestry LIKE $24 OR ancestry LIKE $25 OR ancestry LIKE $26 OR ancestry LIKE $27 OR ancestry LIKE $28 OR ancestry LIKE $29 OR ancestry LIKE $30 OR ancestry LIKE $31 OR ancestry LIKE $32 OR ancestry LIKE $33 OR ancestry LIKE $34 OR ancestry LIKE $35 OR ancestry LIKE $36 OR ancestry LIKE $37 OR ancestry LIKE $38) AND state NOT IN ($39,$40,$41) ), min_next_reviews AS ( SELECT deck_id, MIN(next_review_at) AS min_next_review_at FROM v2.card_progresses WHERE deck_id IN (SELECT id FROM subtree_decks) AND user_id = $42 AND frozen = $43 GROUP BY deck_id ) SELECT sd.id AS deck_id, sd.ancestry, mn.min_next_review_at FROM subtree_decks sd LEFT JOIN min_next_reviews mn ON sd.id = mn.deck_id
110 min 0.1% 65 ms 100,846 ankipro
WITH subtree_decks AS ( SELECT id, ancestry FROM v2.decks WHERE (id IN ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20) OR ancestry LIKE $21 OR ancestry LIKE $22 OR ancestry LIKE $23 OR ancestry LIKE $24 OR ancestry LIKE $25 OR ancestry LIKE $26 OR ancestry LIKE $27 OR ancestry LIKE $28 OR ancestry LIKE $29 OR ancestry LIKE $30 OR ancestry LIKE $31 OR ancestry LIKE $32 OR ancestry LIKE $33 OR ancestry LIKE $34 OR ancestry LIKE $35 OR ancestry LIKE $36 OR ancestry LIKE $37 OR ancestry LIKE $38 OR ancestry LIKE $39 OR ancestry LIKE $40) AND state NOT IN ($41,$42,$43) ), min_next_reviews AS ( SELECT deck_id, MIN(next_review_at) AS min_next_review_at FROM v2.card_progresses WHERE deck_id IN (SELECT id FROM subtree_decks) AND user_id = $44 AND frozen = $45 GROUP BY deck_id ) SELECT sd.id AS deck_id, sd.ancestry, mn.min_next_review_at FROM subtree_decks sd LEFT JOIN min_next_reviews mn ON sd.id = mn.deck_id
110 min 0.1% 12 ms 562,877 ankipro
SELECT "v2"."decks"."id", "v2"."decks"."deck_collaborators_count", "v2"."decks"."deleted_by_user_at", "v2"."decks"."downvotes", "v2"."decks"."import_error_message", "v2"."decks"."name", "v2"."decks"."last_reset_at", "v2"."decks"."public_state", "v2"."decks"."sharing_token", "v2"."decks"."state", "v2"."decks"."visibility", "v2"."decks"."upvotes", "v2"."decks"."user_id", "v2"."decks"."created_at", "v2"."decks"."updated_at", "v2"."decks"."ancestry", "v2"."decks"."slug", "v2"."decks"."seo_description", "v2"."decks"."description", "v2"."decks"."category", "v2"."decks"."cloned_times_count", "v2"."decks"."is_indexable", "v2"."decks"."study_score", "v2"."decks"."library_deck_id", "v2"."decks"."file_hash", "v2"."decks"."cloned_from_id", "v2"."decks"."anki_deck_id", "v2"."decks"."studiers_count", "v2"."decks"."deck_id", "v2"."decks"."moved_at", "v2"."decks"."source", "v2"."decks"."reviews_count", "v2"."decks"."duplicated_from_id", "v2"."decks"."no_cards_limit", "v2"."decks"."category_id" FROM "v2"."decks" WHERE "v2"."decks"."state" IN ($1, $2, $3, $4, $5, $6) AND "v2"."decks"."public_state" = $7 AND (id > $8) AND "v2"."decks"."id" > $9 ORDER BY "v2"."decks"."id" ASC LIMIT $10
108 min 0.1% 0 ms 14,919,798 ankipro
SELECT "v2"."decks"."id", "v2"."decks"."deck_collaborators_count", "v2"."decks"."deleted_by_user_at", "v2"."decks"."downvotes", "v2"."decks"."import_error_message", "v2"."decks"."name", "v2"."decks"."last_reset_at", "v2"."decks"."public_state", "v2"."decks"."sharing_token", "v2"."decks"."state", "v2"."decks"."visibility", "v2"."decks"."upvotes", "v2"."decks"."user_id", "v2"."decks"."created_at", "v2"."decks"."updated_at", "v2"."decks"."ancestry", "v2"."decks"."slug", "v2"."decks"."seo_description", "v2"."decks"."description", "v2"."decks"."category", "v2"."decks"."cloned_times_count", "v2"."decks"."is_indexable", "v2"."decks"."study_score", "v2"."decks"."library_deck_id", "v2"."decks"."file_hash", "v2"."decks"."cloned_from_id", "v2"."decks"."anki_deck_id", "v2"."decks"."studiers_count", "v2"."decks"."deck_id", "v2"."decks"."moved_at", "v2"."decks"."source", "v2"."decks"."reviews_count", "v2"."decks"."duplicated_from_id", "v2"."decks"."no_cards_limit", "v2"."decks"."category_id" FROM "v2"."decks" WHERE "v2"."decks"."public_state" = $1 AND "v2"."decks"."id" = $2 LIMIT $3
107 min 0.1% 22 ms 290,025 ankipro
WITH cte AS ( SELECT id, deck_id, (sum(v2.notes.cards_count) over (order by v2.notes.id)) AS custom_offset FROM v2.notes WHERE $1=$2 AND v2.notes.id IN ($3,$4,$5,$6) ORDER BY id ASC LIMIT $7 ) SELECT * FROM v2.notes AS notes INNER JOIN cte AS c ON c.id = notes.id AND c.deck_id = notes.deck_id AND c.custom_offset > $8 WHERE $9=$10 ORDER BY notes.id ASC LIMIT $11
102 min 0.1% 0 ms 14,851,542 ankipro
SELECT "v2"."decks"."id", "v2"."decks"."deck_collaborators_count", "v2"."decks"."deleted_by_user_at", "v2"."decks"."downvotes", "v2"."decks"."import_error_message", "v2"."decks"."name", "v2"."decks"."last_reset_at", "v2"."decks"."public_state", "v2"."decks"."sharing_token", "v2"."decks"."state", "v2"."decks"."visibility", "v2"."decks"."upvotes", "v2"."decks"."user_id", "v2"."decks"."created_at", "v2"."decks"."updated_at", "v2"."decks"."ancestry", "v2"."decks"."slug", "v2"."decks"."seo_description", "v2"."decks"."description", "v2"."decks"."category", "v2"."decks"."cloned_times_count", "v2"."decks"."is_indexable", "v2"."decks"."study_score", "v2"."decks"."library_deck_id", "v2"."decks"."file_hash", "v2"."decks"."cloned_from_id", "v2"."decks"."anki_deck_id", "v2"."decks"."studiers_count", "v2"."decks"."deck_id", "v2"."decks"."moved_at", "v2"."decks"."source", "v2"."decks"."reviews_count", "v2"."decks"."duplicated_from_id", "v2"."decks"."no_cards_limit", "v2"."decks"."category_id" FROM "v2"."decks" WHERE "v2"."decks"."id" = $1 AND "v2"."decks"."ancestry" = $2
Covered by index on (id)
Rows: 40117592
Row progression: 40117592, 1

Row estimates
- id (=): 1
- ancestry (=): 32

Existing indexes
- id PRIMARY
- id, user_id PRIMARY
- ancestry
- ancestry text_pattern_ops
- ancestry varchar_pattern_ops
- anki_deck_id
- category_id
- cloned_from_id
- deck_import_id
- deleted_by_user_at, user_id
- id, state
- library_deck_id
- public_state, visibility
- sharing_token varchar_pattern_ops UNIQUE
- state
- user_id
- user_id
97 min 0.1% 5 ms 1,237,715 ankipro
SELECT $1 AS one FROM "v2"."decks" WHERE ("v2"."decks"."ancestry" LIKE $2 OR "v2"."decks"."id" = $3) AND "v2"."decks"."state" != $4 AND "v2"."decks"."state" IN ($5, $6, $7, $8) LIMIT $9
90 min 0.1% 3 ms 1,996,227 ankipro
SELECT "v2"."card_progresses"."id", "v2"."card_progresses"."ease_factor", "v2"."card_progresses"."frozen", "v2"."card_progresses"."interval", "v2"."card_progresses"."learning_state", "v2"."card_progresses"."learning_steps_index", "v2"."card_progresses"."next_review_at", "v2"."card_progresses"."ordinal", "v2"."card_progresses"."raw_next_review_at", "v2"."card_progresses"."to_learn_in_current_sl_round", "v2"."card_progresses"."note_id", "v2"."card_progresses"."user_id", "v2"."card_progresses"."created_at", "v2"."card_progresses"."updated_at", "v2"."card_progresses"."fetch_priority", "v2"."card_progresses"."deck_id", "v2"."card_progresses"."undo_data" FROM "v2"."card_progresses" WHERE "v2"."card_progresses"."note_id" = $1 AND "v2"."card_progresses"."ordinal" = $2 AND "v2"."card_progresses"."user_id" = $3
Covered by index on (note_id)
Rows: 112947160
Row progression: 112947160, 0

Row estimates
- note_id (=): 0
- user_id (=): 773
- ordinal (=): 112947160

Existing indexes
- id PRIMARY
- id, deck_id PRIMARY
- deck_id
- deck_id, id
- deck_id, user_id, note_id
- library_card_id
- library_note_id
- note_id
- user_id
- user_id, frozen
- user_id, id
- user_id, note_id
89 min 0.1% 0 ms 12,635,764 ankipro
SELECT "v2"."deck_settings"."id", "v2"."deck_settings"."algorithm_preset", "v2"."deck_settings"."deck_id", "v2"."deck_settings"."easy_interval_minutes", "v2"."deck_settings"."easy_bonus_percent", "v2"."deck_settings"."font_settings", "v2"."deck_settings"."graduated_interval_minutes", "v2"."deck_settings"."interval_modifier_percent", "v2"."deck_settings"."last_sync_at", "v2"."deck_settings"."library_sharing", "v2"."deck_settings"."new_cards_per_day", "v2"."deck_settings"."reverse_mode", "v2"."deck_settings"."offline_mode", "v2"."deck_settings"."sharing", "v2"."deck_settings"."steps_in_minutes", "v2"."deck_settings"."shuffle_mode", "v2"."deck_settings"."tts_autoplay", "v2"."deck_settings"."tts", "v2"."deck_settings"."tts_back_side_language", "v2"."deck_settings"."tts_front_side_language", "v2"."deck_settings"."user_id", "v2"."deck_settings"."created_at", "v2"."deck_settings"."updated_at", "v2"."deck_settings"."position", "v2"."deck_settings"."tts_whole_card_pronunciation", "v2"."deck_settings"."state", "v2"."deck_settings"."max_cards_per_day", "v2"."deck_settings"."card_preset_id", "v2"."deck_settings"."max_interval_minutes", "v2"."deck_settings"."tts_speed", "v2"."deck_settings"."tts_slower_replay", "v2"."deck_settings"."folder_id" FROM "v2"."deck_settings" WHERE "v2"."deck_settings"."deck_id" = $1 AND "v2"."deck_settings"."user_id" = $2 LIMIT $3
Covered by index on (deck_id)
Rows: 40345728
Row progression: 40345728, 1

Row estimates
- deck_id (=): 1
- user_id (=): 170

Existing indexes
- id PRIMARY
- id, deck_id PRIMARY
- deck_id
- deck_id
- folder_id
- user_id
- user_id
89 min 0.1% 1 ms 6,539,971 ankipro
SELECT "v2"."card_progresses"."id" FROM "v2"."card_progresses" WHERE "v2"."card_progresses"."deck_id" = $1 AND "v2"."card_progresses"."user_id" = $2 AND "v2"."card_progresses"."frozen" = $3 AND (v2.card_progresses.next_review_at <= $4 OR v2.card_progresses.next_review_at IS NULL) AND (v2.card_progresses.to_learn_in_current_sl_round = $5 OR v2.card_progresses.to_learn_in_current_sl_round IS NULL) AND (learning_state IN ($6,$7,$8)) ORDER BY CASE v2.card_progresses.learning_state WHEN $9 THEN $10 WHEN $11 THEN $12 ELSE $13 END ASC, CASE WHEN v2.card_progresses.fetch_priority = $14 THEN $15 ELSE $16 END, RANDOM() LIMIT $17
88 min 0.1% 0 ms 14,848,322 ankipro
SELECT "v2"."deck_counters"."id", "v2"."deck_counters"."deck_id", "v2"."deck_counters"."got_it_count", "v2"."deck_counters"."graduated_count", "v2"."deck_counters"."frozen_count", "v2"."deck_counters"."learning_count", "v2"."deck_counters"."new_count", "v2"."deck_counters"."presented_count", "v2"."deck_counters"."reviewed_today_count", "v2"."deck_counters"."recalculate_at", "v2"."deck_counters"."study_again_count", "v2"."deck_counters"."to_learn_today_count", "v2"."deck_counters"."to_review_count", "v2"."deck_counters"."total_new_count", "v2"."deck_counters"."user_id", "v2"."deck_counters"."created_at", "v2"."deck_counters"."updated_at", "v2"."deck_counters"."total_not_learned_count", "v2"."deck_counters"."offline_available_count", "v2"."deck_counters"."learning_total_count", "v2"."deck_counters"."graduated_total_count" FROM "v2"."deck_counters" WHERE "v2"."deck_counters"."deck_id" = $1 AND "v2"."deck_counters"."user_id" = $2
Covered by index on (deck_id)
Rows: 40273848
Row progression: 40273848, 1

Row estimates
- deck_id (=): 1
- user_id (=): 448

Existing indexes
- id PRIMARY
- id, deck_id PRIMARY
- deck_id
- deck_id, user_id UNIQUE
- user_id
- user_id