drago1520

Untitled

Nov 9th, 2025
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //8 min. query; catalog - products table; podmenuM - 3rd level category table
  2. const result = await db
  3.     .select({
  4.       podmenuId: podmenuM.podmenuMId,
  5.       name: podmenuM.pmIme,
  6.       productCount: count(catalog.catalogId),
  7.     })
  8.     .from(podmenuM)
  9.     .leftJoin(
  10.       catalog,
  11.       and(
  12.         or(
  13.           eq(catalog.menuPod, podmenuM.podmenuMId),
  14.           eq(catalog.menuPod1, podmenuM.podmenuMId),
  15.           eq(catalog.menuPod2, podmenuM.podmenuMId),
  16.         ),
  17.         ne(catalog.pActi, 1),
  18.         eq(catalog.vidimost, 1),
  19.         eq(catalog.novaStokaAktiv, 1),
  20.       ),
  21.     )
  22.     .groupBy(podmenuM.podmenuMId, podmenuM.pmIme);
  23.  
  24. //0.7 sec multiple dismantled queries by OR, otherwise same as above. It searches only for 1 possible place for the product to be in a category 3 times, instead of hoping on the product and searching for all possible places it could be like the upper query; Why did I broke it into 3 queries? If using a single query, it did not recognize the indexes and it was still super slow (8 min.)
  25. const [q1, q2, q3] = await Promise.all(
  26.     [db
  27.       .select({
  28.         podmenuId: podmenuM.podmenuMId,
  29.         name: podmenuM.pmIme,
  30.         productCount: count(catalog.catalogId),
  31.       })
  32.       .from(podmenuM)
  33.       .leftJoin(
  34.         catalog,
  35.         and(
  36.           eq(catalog.menuPod, podmenuM.podmenuMId),
  37.           ne(catalog.pActi, 1),
  38.           eq(catalog.vidimost, 1),
  39.           eq(catalog.novaStokaAktiv, 1),
  40.         ),
  41.       )
  42.       .groupBy(podmenuM.podmenuMId, podmenuM.pmIme),
  43.     db
  44.       .select({
  45.         podmenuId: podmenuM.podmenuMId,
  46.         name: podmenuM.pmIme,
  47.         productCount: count(catalog.catalogId),
  48.       })
  49.       .from(podmenuM)
  50.       .leftJoin(
  51.         catalog,
  52.         and(
  53.           eq(catalog.menuPod1, podmenuM.podmenuMId),
  54.           ne(catalog.pActi, 1),
  55.           eq(catalog.vidimost, 1),
  56.           eq(catalog.novaStokaAktiv, 1),
  57.         ),
  58.       )
  59.       .groupBy(podmenuM.podmenuMId, podmenuM.pmIme),
  60.     db
  61.       .select({
  62.         podmenuId: podmenuM.podmenuMId,
  63.         name: podmenuM.pmIme,
  64.         productCount: count(catalog.catalogId),
  65.       })
  66.       .from(podmenuM)
  67.       .leftJoin(
  68.         catalog,
  69.         and(
  70.           eq(catalog.menuPod2, podmenuM.podmenuMId),
  71.           ne(catalog.pActi, 1),
  72.           eq(catalog.vidimost, 1),
  73.           eq(catalog.novaStokaAktiv, 1),
  74.         ),
  75.       )
  76.       .groupBy(podmenuM.podmenuMId, podmenuM.pmIme)]
  77.   );
Advertisement
Add Comment
Please, Sign In to add comment