PgHero
No long running queries
Connections healthy 41
Vacuuming healthy
No columns near integer overflow
No invalid indexes
2 duplicate indexes
No suggested indexes
2 slow queries

Duplicate Indexes

These indexes exist, but aren’t needed. Remove them with a migration for faster writes.

Details
On ahoy_events
index_ahoy_events_on_user_id (user_id)
is covered by
index_ahoy_events_on_user_id_and_name (user_id, name)
On ahoy_events
index_ahoy_events_on_visit_id (visit_id)
is covered by
index_ahoy_events_on_visit_id_and_name (visit_id, name)

Slow Queries

Slow queries take 20 ms or more on average and have been called at least 100 times.

Explain queries to see where to add indexes.

Total Time Average Time Calls
0 min 4% 41 ms 275 datakick · details
SELECT  "items"."id" AS t0_r0, "items"."gtin" AS t0_r1, "items"."created_at" AS t0_r2, "items"."updated_at" AS t0_r3, "items"."current_revision_id" AS t0_r4, "revisions"."id" AS t1_r0, "revisions"."item_id" AS t1_r1, "revisions"."name" AS t1_r2, "revisions"."size" AS t1_r3, "revisions"."author" AS t1_r4, "revisions"."ip" AS t1_r5, "revisions"."user_agent" AS t1_r6, "revisions"."created_at" AS t1_r7, "revisions"."serving_size" AS t1_r8, "revisions"."servings_per_container" AS t1_r9, "revisions"."calories" AS t1_r10, "revisions"."fat" AS t1_r11, "revisions"."saturated_fat" AS t1_r12, "revisions"."trans_fat" AS t1_r13, "revisions"."cholesterol" AS t1_r14, "revisions"."sodium" AS t1_r15, "revisions"."carbohydrate" AS t1_r16, "revisions"."fiber" AS t1_r17, "revisions"."sugars" AS t1_r18, "revisions"."protein" AS t1_r19, "revisions"."format" AS t1_r20, "revisions"."pages" AS t1_r21, "revisions"."publisher" AS t1_r22, "revisions"."ingredients" AS t1_r23, "revisions"."image_url" AS t1_r24, "revisions"."brand_name" AS t1_r25, "revisions"."user_id" AS t1_r26, "revisions"."hit_id" AS t1_r27, "revisions"."worker_id" AS t1_r28, "revisions"."fat_calories" AS t1_r29, "revisions"."polyunsaturated_fat" AS t1_r30, "revisions"."monounsaturated_fat" AS t1_r31, "revisions"."potassium" AS t1_r32, "revisions"."visit_id" AS t1_r33, "revisions"."alcohol_by_volume" AS t1_r34 FROM "items" INNER JOIN "revisions" ON "revisions"."id" = "items"."current_revision_id" WHERE ("revisions"."name" IS NOT NULL) AND ("items"."gtin" != $1) ORDER BY LENGTH(gtin), gtin LIMIT $2 OFFSET $3 /*application:Datakick,controller:items,action:index*/
0 min 2% 29 ms 174 datakick · details
SELECT "items"."id" AS t0_r0, "items"."gtin" AS t0_r1, "items"."created_at" AS t0_r2, "items"."updated_at" AS t0_r3, "items"."current_revision_id" AS t0_r4, "revisions"."id" AS t1_r0, "revisions"."item_id" AS t1_r1, "revisions"."name" AS t1_r2, "revisions"."size" AS t1_r3, "revisions"."author" AS t1_r4, "revisions"."ip" AS t1_r5, "revisions"."user_agent" AS t1_r6, "revisions"."created_at" AS t1_r7, "revisions"."serving_size" AS t1_r8, "revisions"."servings_per_container" AS t1_r9, "revisions"."calories" AS t1_r10, "revisions"."fat" AS t1_r11, "revisions"."saturated_fat" AS t1_r12, "revisions"."trans_fat" AS t1_r13, "revisions"."cholesterol" AS t1_r14, "revisions"."sodium" AS t1_r15, "revisions"."carbohydrate" AS t1_r16, "revisions"."fiber" AS t1_r17, "revisions"."sugars" AS t1_r18, "revisions"."protein" AS t1_r19, "revisions"."format" AS t1_r20, "revisions"."pages" AS t1_r21, "revisions"."publisher" AS t1_r22, "revisions"."ingredients" AS t1_r23, "revisions"."image_url" AS t1_r24, "revisions"."brand_name" AS t1_r25, "revisions"."user_id" AS t1_r26, "revisions"."hit_id" AS t1_r27, "revisions"."worker_id" AS t1_r28, "revisions"."fat_calories" AS t1_r29, "revisions"."polyunsaturated_fat" AS t1_r30, "revisions"."monounsaturated_fat" AS t1_r31, "revisions"."potassium" AS t1_r32, "revisions"."visit_id" AS t1_r33, "revisions"."alcohol_by_volume" AS t1_r34, "images"."id" AS t2_r0, "images"."image" AS t2_r1, "images"."created_at" AS t2_r2, "images"."updated_at" AS t2_r3, "images"."item_id" AS t2_r4, "images"."perspective" AS t2_r5, "images"."ip" AS t2_r6, "images"."user_agent" AS t2_r7, "images"."user_id" AS t2_r8 FROM "items" INNER JOIN "revisions" ON "revisions"."id" = "items"."current_revision_id" LEFT OUTER JOIN "images" ON "images"."item_id" = "items"."id" WHERE ("revisions"."name" IS NOT NULL) AND ("items"."gtin" != $1) AND ("items"."id" > $2) AND "items"."id" IN ($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, $151, $152, $153, $154, $155, $156, $157, $158, $159, $160, $161, $162, $163, $164, $165, $166, $167, $168, $169, $170, $171, $172, $173, $174, $175, $176, $177, $178, $179, $180, $181, $182, $183, $184, $185, $186, $187, $188, $189, $190, $191, $192, $193, $194, $195, $196, $197, $198, $199, $200, $201, $202, $203, $204, $205, $206, $207, $208, $209, $210, $211, $212, $213, $214, $215, $216, $217, $218, $219, $220, $221, $222, $223, $224, $225, $226, $227, $228, $229, $230, $231, $232, $233, $234, $235, $236, $237, $238, $239, $240, $241, $242, $243, $244, $245, $246, $247, $248, $249, $250, $251, $252, $253, $254, $255, $256, $257, $258, $259, $260, $261, $262, $263, $264, $265, $266, $267, $268, $269, $270, $271, $272, $273, $274, $275, $276, $277, $278, $279, $280, $281, $282, $283, $284, $285, $286, $287, $288, $289, $290, $291, $292, $293, $294, $295, $296, $297, $298, $299, $300, $301, $302, $303, $304, $305, $306, $307, $308, $309, $310, $311, $312, $313, $314, $315, $316, $317, $318, $319, $320, $321, $322, $323, $324, $325, $326, $327, $328, $329, $330, $331, $332, $333, $334, $335, $336, $337, $338, $339, $340, $341, $342, $343, $344, $345, $346, $347, $348, $349, $350, $351, $352, $353, $354, $355, $356, $357, $358, $359, $360, $361, $362, $363, $364, $365, $366, $367, $368, $369, $370, $371, $372, $373, $374, $375, $376, $377, $378, $379, $380, $381, $382, $383, $384, $385, $386, $387, $388, $389, $390, $391, $392, $393, $394, $395, $396, $397, $398, $399, $400, $401, $402, $403, $404, $405, $406, $407, $408, $409, $410, $411, $412, $413, $414, $415, $416, $417, $418, $419, $420, $421, $422, $423, $424, $425, $426, $427, $428, $429, $430, $431, $432, $433, $434, $435, $436, $437, $438, $439, $440, $441, $442, $443, $444, $445, $446, $447, $448, $449, $450, $451, $452, $453, $454, $455, $456, $457, $458, $459, $460, $461, $462, $463, $464, $465, $466, $467, $468, $469, $470, $471, $472, $473, $474, $475, $476, $477, $478, $479, $480, $481, $482, $483, $484, $485, $486, $487, $488, $489, $490, $491, $492, $493, $494, $495, $496, $497, $498, $499, $500, $501, $502, $503, $504, $505, $506, $507, $508, $509, $510, $511, $512, $513, $514, $515, $516, $517, $518, $519, $520, $521, $522, $523, $524, $525, $526, $527, $528, $529, $530, $531, $532, $533, $534, $535, $536, $537, $538, $539, $540, $541, $542, $543, $544, $545, $546, $547, $548, $549, $550, $551, $552, $553, $554, $555, $556, $557, $558, $559, $560, $561, $562, $563, $564, $565, $566, $567, $568, $569, $570, $571, $572, $573, $574, $575, $576, $577, $578, $579, $580, $581, $582, $583, $584, $585, $586, $587, $588, $589, $590, $591, $592, $593, $594, $595, $596, $597, $598, $599, $600, $601, $602, $603, $604, $605, $606, $607, $608, $609, $610, $611, $612, $613, $614, $615, $616, $617, $618, $619, $620, $621, $622, $623, $624, $625, $626, $627, $628, $629, $630, $631, $632, $633, $634, $635, $636, $637, $638, $639, $640, $641, $642, $643, $644, $645, $646, $647, $648, $649, $650, $651, $652, $653, $654, $655, $656, $657, $658, $659, $660, $661, $662, $663, $664, $665, $666, $667, $668, $669, $670, $671, $672, $673, $674, $675, $676, $677, $678, $679, $680, $681, $682, $683, $684, $685, $686, $687, $688, $689, $690, $691, $692, $693, $694, $695, $696, $697, $698, $699, $700, $701, $702, $703, $704, $705, $706, $707, $708, $709, $710, $711, $712, $713, $714, $715, $716, $717, $718, $719, $720, $721, $722, $723, $724, $725, $726, $727, $728, $729, $730, $731, $732, $733, $734, $735, $736, $737, $738, $739, $740, $741, $742, $743, $744, $745, $746, $747, $748, $749, $750, $751, $752, $753, $754, $755, $756, $757, $758, $759, $760, $761, $762, $763, $764, $765, $766, $767, $768, $769, $770, $771, $772, $773, $774, $775, $776, $777, $778, $779, $780, $781, $782, $783, $784, $785, $786, $787, $788, $789, $790, $791, $792, $793, $794, $795, $796, $797, $798, $799, $800, $801, $802, $803, $804, $805, $806, $807, $808, $809, $810, $811, $812, $813, $814, $815, $816, $817, $818, $819, $820, $821, $822, $823, $824, $825, $826, $827, $828, $829, $830, $831, $832, $833, $834, $835, $836, $837, $838, $839, $840, $841, $842, $843, $844, $845, $846, $847, $848, $849, $850, $851, $852, $853, $854, $855, $856, $857, $858, $859, $860, $861, $862, $863, $864, $865, $866, $867, $868, $869, $870, $871, $872, $873, $874, $875, $876, $877, $878, $879, $880, $881, $882, $883, $884, $885, $886, $887, $888, $889, $890, $891, $892, $893, $894, $895, $896, $897, $898, $899, $900, $901, $902, $903, $904, $905, $906, $907, $908, $909, $910, $911, $912, $913, $914, $915, $916, $917, $918, $919, $920, $921, $922, $923, $924, $925, $926, $927, $928, $929, $930, $931, $932, $933, $934, $935, $936, $937, $938, $939, $940, $941, $942, $943, $944, $945, $946, $947, $948, $949, $950, $951, $952, $953, $954, $955, $956, $957, $958, $959, $960, $961, $962, $963, $964, $965, $966, $967, $968, $969, $970, $971, $972, $973, $974, $975, $976, $977, $978, $979, $980, $981, $982, $983, $984, $985, $986, $987, $988, $989, $990, $991, $992, $993, $994, $995, $996, $997, $998, $999, $1000, $1001, $1002) ORDER BY "items"."id" ASC /*application:Datakick,controller:items,action:index*/