Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //8 min. query; catalog - products table; podmenuM - 3rd level category table
- const result = await db
- .select({
- podmenuId: podmenuM.podmenuMId,
- name: podmenuM.pmIme,
- productCount: count(catalog.catalogId),
- })
- .from(podmenuM)
- .leftJoin(
- catalog,
- and(
- or(
- eq(catalog.menuPod, podmenuM.podmenuMId),
- eq(catalog.menuPod1, podmenuM.podmenuMId),
- eq(catalog.menuPod2, podmenuM.podmenuMId),
- ),
- ne(catalog.pActi, 1),
- eq(catalog.vidimost, 1),
- eq(catalog.novaStokaAktiv, 1),
- ),
- )
- .groupBy(podmenuM.podmenuMId, podmenuM.pmIme);
- //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.)
- const [q1, q2, q3] = await Promise.all(
- [db
- .select({
- podmenuId: podmenuM.podmenuMId,
- name: podmenuM.pmIme,
- productCount: count(catalog.catalogId),
- })
- .from(podmenuM)
- .leftJoin(
- catalog,
- and(
- eq(catalog.menuPod, podmenuM.podmenuMId),
- ne(catalog.pActi, 1),
- eq(catalog.vidimost, 1),
- eq(catalog.novaStokaAktiv, 1),
- ),
- )
- .groupBy(podmenuM.podmenuMId, podmenuM.pmIme),
- db
- .select({
- podmenuId: podmenuM.podmenuMId,
- name: podmenuM.pmIme,
- productCount: count(catalog.catalogId),
- })
- .from(podmenuM)
- .leftJoin(
- catalog,
- and(
- eq(catalog.menuPod1, podmenuM.podmenuMId),
- ne(catalog.pActi, 1),
- eq(catalog.vidimost, 1),
- eq(catalog.novaStokaAktiv, 1),
- ),
- )
- .groupBy(podmenuM.podmenuMId, podmenuM.pmIme),
- db
- .select({
- podmenuId: podmenuM.podmenuMId,
- name: podmenuM.pmIme,
- productCount: count(catalog.catalogId),
- })
- .from(podmenuM)
- .leftJoin(
- catalog,
- and(
- eq(catalog.menuPod2, podmenuM.podmenuMId),
- ne(catalog.pActi, 1),
- eq(catalog.vidimost, 1),
- eq(catalog.novaStokaAktiv, 1),
- ),
- )
- .groupBy(podmenuM.podmenuMId, podmenuM.pmIme)]
- );
Advertisement
Add Comment
Please, Sign In to add comment