{"id":463197,"date":"2025-06-13T10:29:59","date_gmt":"2025-06-13T10:29:59","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=463197"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=463197","title":{"rendered":"<span>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 Django. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440! \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0445\u043e\u0447\u0443 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 <a href=\"https:\/\/www.djangoproject.com\/\" rel=\"noopener noreferrer nofollow\">Django<\/a>. \u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c, \u043d\u043e \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u043b\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0431\u0430\u0437\u0435. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/SQL\" rel=\"noopener noreferrer nofollow\">SQL<\/a>, \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0438 \u0432\u044b\u0432\u043e\u0434\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. <\/p>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043a\u0430\u043a \u0434\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0430 django, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445, \u043a\u0442\u043e \u0435\u0449\u0435 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u0441\u044f, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/ORM\" rel=\"noopener noreferrer nofollow\">ORM<\/a>.<\/p>\n<p>\u042f \u0432\u0438\u0434\u0435\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0435\u0439 \u043d\u0430 \u0442\u0435\u043c\u0443 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 django, \u043d\u043e \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e, \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0432 \u043d\u0438\u0445 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u043e\u0441\u044c \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043f\u0430\u0440\u0443 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0445\u043e\u0440\u043e\u0448\u043e, \u0435\u0441\u043b\u0438 \u0432 \u043d\u0438\u0445 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u0438\u0441\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u0438\u043b\u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0441\u044f \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u0435\u0442\u043e\u0434. \u0412 \u043e\u0431\u0449\u0435\u043c, \u044f \u043d\u0435 \u0441\u043c\u043e\u0433 \u0431\u0435\u0433\u043b\u044b\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u043d\u0430\u0439\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u043e \u0432\u0441\u0435\u043c, \u0447\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0431\u0435\u0440\u0435\u0448\u044c\u0441\u044f \u0437\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443.<\/p>\n<p>\u0422\u0443\u0442 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043a\u0430\u0441\u0430\u044e\u0442\u0441\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/ORM\" rel=\"noopener noreferrer nofollow\">ORM<\/a> \u043f\u043e \u0442\u0438\u043f\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <a href=\"https:\/\/docs.python.org\/3\/library\/functools.html#functools.cached_property\" rel=\"noopener noreferrer nofollow\"><code>functools.cached_property<\/code><\/a> \u0438\u043b\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043e\u043a\u043e\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0430 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445, \u0442\u0430\u043a \u043a\u0430\u043a \u0438\u0445 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0434\u0430\u043b\u0435\u043a\u043e \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u0441\u0442\u0430\u0442\u044c\u0438, \u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438 \u043a\u043d\u0438\u0433\u0438.<\/p>\n<p>\u041f\u043e\u043d\u0438\u043c\u0430\u044e, \u0447\u0442\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b, \u043c\u044f\u0433\u043a\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043e\u0431\u044a\u0435\u043c\u043d\u044b\u0439, \u043d\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0431\u0435\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u043c &#171;\u0418\u0442\u043e\u0433\u0438 \u0433\u043b\u0430\u0432\u044b&#187; \u0438\u043b\u0438 \u0441\u0430\u043c\u043e\u043c\u0443 \u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0434\u043b\u044f \u0432\u0430\u0441 \u0432\u043e\u043e\u0431\u0449\u0435 \u0441\u043c\u044b\u0441\u043b \u0447\u0438\u0442\u0430\u0442\u044c \u0442\u043e\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0440\u0430\u0437\u0434\u0435\u043b.<\/p>\n<h2>\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/h2>\n<ul>\n<li>\n<p><a href=\"#%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\" rel=\"noopener noreferrer nofollow\">\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f<\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0-n-%D0%BF%D0%BB%D1%8E%D1%81-1\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 N+1<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0-%D0%B7%D0%B0%D0%BF%D1%80%D0%B0%D1%88%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC%D1%8B%D1%85-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85\" rel=\"noopener noreferrer nofollow\">\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%BF%D0%BE-%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8-%D0%B4%D0%BB%D1%8F-%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2\" rel=\"noopener noreferrer nofollow\">\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%BF%D1%80%D0%BE%D1%87%D0%B8%D0%B5-%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D1%8B-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0447\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%B8%D1%82%D0%BE%D0%B3%D0%B8-%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B-1\" rel=\"noopener noreferrer nofollow\">\u0418\u0442\u043e\u0433\u0438 \u0433\u043b\u0430\u0432\u044b<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#%D0%B1%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D1%8F-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\" rel=\"noopener noreferrer nofollow\">\u0411\u0430\u0437\u043e\u0432\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f<\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%B4%D0%BB%D1%8F-m2m-%D0%B8-o2m-%D1%81%D0%B2%D1%8F%D0%B7%D0%B5%D0%B9\" rel=\"noopener noreferrer nofollow\">\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0434\u043b\u044f M2M \u0438 O2M \u0441\u0432\u044f\u0437\u0435\u0439<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%BF%D0%BE%D0%B4%D0%B2%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5-%D0%BA%D0%B0%D0%BC%D0%BD%D0%B8-%D1%81-%D0%B4%D1%83%D0%B1%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B5%D0%B9\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0435 \u043a\u0430\u043c\u043d\u0438 \u0441 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0435\u0439<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0-%D0%BD%D0%B0-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B9-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B\" rel=\"noopener noreferrer nofollow\">\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0440\u0443\u0433\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F-%D0%B8-%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B5%D0%B9\" rel=\"noopener noreferrer nofollow\">\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%B8%D1%82%D0%BE%D0%B3%D0%B8-%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B-2\" rel=\"noopener noreferrer nofollow\">\u0418\u0442\u043e\u0433\u0438 \u0433\u043b\u0430\u0432\u044b<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D0%B0%D1%8F-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f<\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#%D1%82%D0%B8%D0%BF%D1%8B-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85\" rel=\"noopener noreferrer nofollow\">\u0422\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%B2%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B2-%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%8B\" rel=\"noopener noreferrer nofollow\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%BE%D0%B2\" rel=\"noopener noreferrer nofollow\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D1%8B-%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%BE%D0%B2-%D0%B8-%D0%B8%D1%85-%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%BE\" rel=\"noopener noreferrer nofollow\">\u0420\u0430\u0437\u043c\u0435\u0440\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0438 \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%BE%D0%B2\" rel=\"noopener noreferrer nofollow\">\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%B8%D1%82%D0%BE%D0%B3%D0%B8-%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B-3\" rel=\"noopener noreferrer nofollow\">\u0418\u0442\u043e\u0433\u0438 \u0433\u043b\u0430\u0432\u044b<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#%D0%BF%D1%80%D0%BE%D1%87%D0%B8%D0%B5-%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D1%8B-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0447\u0438\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%B7%D0%B0%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\" id=\"\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f-\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\"><\/a><\/p>\n<h2>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f<\/h2>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u0441 \u0442\u043e\u0433\u043e \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u043d\u0430\u0442\u044c \u0432\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0435 django orm, \u043d\u043e \u0441\u043f\u0435\u0440\u0432\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432.<\/p>\n<p>\u042f \u0441\u043e\u0437\u0434\u0430\u043b \u0447\u0438\u0441\u0442\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 django \u0438 \u0432 \u043d\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u043b 3 \u043c\u043e\u0434\u0443\u043b\u044f <code>minimum<\/code> \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0433\u043b\u0430\u0432\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 <code>middle<\/code> \u0438 <code>advanced<\/code> \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0433\u043b\u0430\u0432.<\/p>\n<p>\u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code>Django 5.2.2<\/code> \u0438 <code>PostgreSQL 17.5<\/code>.<\/p>\n<details class=\"spoiler\">\n<summary>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">asgiref==3.8.1 asttokens==3.0.0 decorator==5.2.1 Django==5.2.2 django-stubs==5.2.0 django-stubs-ext==5.2.0 executing==2.2.0 factory_boy==3.3.3 Faker==37.3.0 ipython==9.2.0 ipython_pygments_lexers==1.1.1 jedi==0.19.2 matplotlib-inline==0.1.7 parso==0.8.4 pexpect==4.9.0 prompt_toolkit==3.0.51 psycopg2-binary==2.9.10 ptyprocess==0.7.0 pure_eval==0.2.3 Pygments==2.19.1 Pympler==1.1 sqlparse==0.5.3 stack-data==0.6.3 traitlets==5.14.3 types-PyYAML==6.0.12.20250516 typing_extensions==4.14.0 tzdata==2025.2 wcwidth==0.2.13<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0423\u0442\u0438\u043b\u0438\u0442\u044b \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 sql, \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0438 \u043f\u043b\u0430\u043d\u0430 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">import sqlparse from django.db import connection from django.db import reset_queries from django.db.models import QuerySet from pympler.asizeof import asizeof   # \u041d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0430\u0440\u0443 \u0443\u0442\u0438\u043b\u0438\u0442 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f def get_size(obj):     # \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430     size_bytes = asizeof(obj)     size_kb = size_bytes \/ 1024     size_mb = size_kb \/ 1024     return f\"{size_mb:.2f} MB, {size_kb:.2f} KB\"  # \u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c # SQL \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044b\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f # \u043a\u043e\u0434\u0430 \u0432 \u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 class CheckQueries:     _count_only: bool     _time_only: bool          # \u041d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u043e\u043c     def __init__(self, count_only=False, time_only=False):         # \u041d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432         reset_queries()         self._count_only = count_only         self._time_only = time_only          # \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432     def __enter__(self, count_only=False):         reset_queries()      def __exit__(self, exc_type, exc_val, exc_tb):         if self._count_only:             print(f\"\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432: {len(connection.queries)}\")             return                  # \u041f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c \u0438 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u043c          # \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0438\u0445         for number, query in enumerate(connection.queries):             if self._time_only:                 print(f\"\u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: {query['time']} s\")                 continue              print(f\"SQL \u0437\u0430\u043f\u0440\u043e\u0441 {number + 1}\")             # \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 sql             print(sqlparse.format(                 query['sql'],                  reindent=True,                  keyword_case='upper'             ))             print(f\"\u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: {query['time']} s\")             print(\"-\" * 20)  # \u0424\u0443\u043d\u043a\u0446\u0438\u044f, \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u043b\u0430\u043d\u0430 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u0438 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 # \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 def explain(queryset: QuerySet):     print(queryset.explain(analyze=True)) <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043d\u0430\u043a\u0438\u0434\u0430\u0435\u043c \u043f\u0430\u0440\u0443 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 django.<\/p>\n<pre><code class=\"python\">from django.db import models   # \u041c\u043e\u0434\u0435\u043b\u044c, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f class Bar(models.Model):     short_field = models.CharField(max_length=64)     long_field = models.TextField(max_length=4096)     ...   # \u041c\u043e\u0434\u0435\u043b\u044c, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u043a\u0430\u043a \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f, \u0442\u0430\u043a \u0438 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0442\u0430\u0431\u043b\u0438\u0446\u044b Bar class Foo(models.Model):     short_field = models.CharField(max_length=64)     long_field = models.TextField(max_length=4096)     ...     bar = models.ForeignKey(Bar, on_delete=models.CASCADE)<\/code><\/pre>\n<p>\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435, \u0434\u0443\u043c\u0430\u044e, \u043d\u0430\u043c \u0445\u0432\u0430\u0442\u0438\u0442 \u043f\u043e 10 000 \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\"># \u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0444\u044d\u0439\u043a\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 from django.db import transaction from factory.fuzzy import FuzzyText  from minimum.models import Bar, Foo  # \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 long_text_generator = FuzzyText(length=4096) short_text_generator = FuzzyText(length=64)  def get_long_text():     return long_text_generator.fuzz()  def get_short_text():     return short_text_generator.fuzz()   # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0438 Bar def create_bars(count):     # \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u0430 Bar     bars = []     for _ in range(count):         # \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440         bars.append(Bar(             # \u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438             short_field=get_short_text(),             long_field=get_long_text(),         ))      return Bar.objects.bulk_create(bars, batch_size=1000)  # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0438 Foo @transaction.atomic def create_foos(count):     # \u0417\u0434\u0435\u0441\u044c \u043b\u043e\u0433\u0438\u043a\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430 create_bars     bars = create_bars(count)     foos = []     for bar in bars:         foos.append(Foo(             # \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430             bar_id=bar.id,             short_field=get_short_text(),             long_field=get_long_text(),         ))      return Foo.objects.bulk_create(foos, batch_size=1000)  # \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u043e 10 000 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 Foo \u0438 Bar \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 create_foos(10_000)<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432<\/p>\n<p><a class=\"anchor\" name=\"%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0-n-%D0%BF%D0%BB%D1%8E%D1%81-1\" id=\"\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430-n-\u043f\u043b\u044e\u0441-1\"><\/a><\/p>\n<h3>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 N + 1<\/h3>\n<p>\u0422\u0443\u0442 \u0445\u043e\u0447\u0443 \u043f\u043b\u0430\u0432\u043d\u043e \u043f\u043e\u0434\u0432\u0435\u0441\u0442\u0438 \u043a \u0441\u0430\u043c\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0435 \u0441\u0443\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435.<\/p>\n<pre><code class=\"python\">from minimum.models import Foo  # \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u043f\u0435\u0440\u0432\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b Foo with CheckQueries():     # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b Foo     foo = Foo.objects.first()     # \u0410 \u0442\u0430\u043a\u0436\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u043a\u043e\u0433\u043e \u043b\u0438\u0431\u043e \u043f\u043e\u043b\u044f foo.bar.*     bar_short_field = foo.bar.short_field<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0417\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u043e 2 SQL \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SQL \u0437\u0430\u043f\u0440\u043e\u0441 1 (\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b Foo) SELECT \"minimum_foo\".\"id\",        \"minimum_foo\".\"short_field\",        \"minimum_foo\".\"long_field\",        \"minimum_foo\".\"bar_id\" FROM \"minimum_foo\" ORDER BY \"minimum_foo\".\"id\" ASC LIMIT 1 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 2 (\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b Bar) SELECT \"minimum_bar\".\"id\",        \"minimum_bar\".\"short_field\",        \"minimum_bar\".\"long_field\" FROM \"minimum_bar\" WHERE \"minimum_bar\".\"id\" = 20001 LIMIT 21 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000s<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e django \u043d\u0435 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446, \u0438, \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0443, \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0449\u0435 \u043d\u0435 \u0431\u044b\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b, django \u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u041f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u0443\u0436\u0435 \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u043e\u043c\u0443 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0443, \u043d\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0443\u0434\u043e\u0431\u043d\u044b\u043c, \u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0435\u0433\u043e \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u043e, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c, \u0447\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u0430\u0441\u043d\u0430 \u0434\u0430\u043d\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c.<\/p>\n<pre><code class=\"python\"># \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b Foo with CheckQueries(count_only=True):     # \u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0441\u0435 \u0435\u0449\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d.     # \u0427\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441, QuerySet \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0446\u0435\u043d\u0438\u0442\u044c.     # \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438:     #   1) \u041d\u0430\u0447\u0430\u0442\u044c \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0443 QuerySet     #   2) \u041f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0432\u044b\u0437\u043e\u0432 list, \u0447\u0442\u043e \u043f\u043e \u0441\u0443\u0442\u0438 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435,     #   3) \u041f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0432\u044b\u0437\u043e\u0432 bool (\u043d\u043e \u0442\u0443\u0442 \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b).     # \u0412 \u0446\u0435\u043b\u043e\u043c, \u043e\u0446\u0435\u043d\u0438\u0442\u044c QuerySet \u043c\u043e\u0436\u043d\u043e \u0438 \u0438\u043d\u0430\u0447\u0435,     # \u043d\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.     queryset = Foo.objects.all()     # \u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 QuerySet \u0431\u0443\u0434\u0435\u0442 \u043e\u0446\u0435\u043d\u0435\u043d \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0437\u043e\u0432\u0430     # \u043c\u0435\u0442\u043e\u0434\u0430 __iter__ \u043a\u043b\u0430\u0441\u0441\u0430 QuerySet, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0441\u0440\u0435\u0437     # [:1000] \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442 LIMIT \u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0443     for foo in queryset[:1000]: # SQL \u0437\u0430\u043f\u0440\u043e\u0441 1         # \u0410 \u0442\u0430\u043a\u0436\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u043a\u043e\u0433\u043e \u043b\u0438\u0431\u043e \u043f\u043e\u043b\u044f foo.bar.*         bar_short_field = foo.bar.short_field # SQL \u0437\u0430\u043f\u0440\u043e\u0441 2 - 1001  # \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432: 1001<\/code><\/pre>\n<p><em>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u043e\u0446\u0435\u043d\u043a\u0443 <\/em><code><em>QuerySet<\/em><\/code><em> \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 <\/em><a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/models\/querysets\/#when-querysets-are-evaluated\" rel=\"noopener noreferrer nofollow\"><em>\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/em><\/a><em>. <\/em><\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 1001 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 1000 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043e\u0431\u044b\u0447\u043d\u043e \u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <strong>&#171;\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 N + 1&#187;<\/strong>.<\/p>\n<p>\u041c\u044b \u0435\u0434\u0438\u043d\u043e\u0436\u0434\u044b \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b <code>Foo<\/code>, \u043d\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0435\u0449\u0435 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438 <code>Bar<\/code>. <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c <code>INNER JOIN<\/code> \u0442\u0430\u0431\u043b\u0438\u0446\u044b <code>Bar<\/code>. \u0412 django \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 <code>QuerySet.select_related<\/code>. <\/p>\n<pre><code class=\"python\">with CheckQueries():     # \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c select_related, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0443     # \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0435 bar     queryset = Foo.objects.select_related(\"bar\")     for foo in queryset[:1000]: # SQL \u0437\u0430\u043f\u0440\u043e\u0441 1         # \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0442\u0440\u043e\u0447\u043a\u0430 \u043d\u0435 \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b          bar_short_field = foo.bar.short_field<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d SQL \u0437\u0430\u043f\u0440\u043e\u0441<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SELECT \"minimum_foo\".\"id\",        \"minimum_foo\".\"short_field\",        \"minimum_foo\".\"long_field\",        \"minimum_foo\".\"bar_id\",        \"minimum_bar\".\"id\",        \"minimum_bar\".\"short_field\",        \"minimum_bar\".\"long_field\" FROM \"minimum_foo\" INNER JOIN \"minimum_bar\" ON (\"minimum_foo\".\"bar_id\" = \"minimum_bar\".\"id\") LIMIT 1000 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.008s<\/code><\/pre>\n<\/div>\n<\/details>\n<p><em>\u041f\u0440\u043e \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c <\/em><a href=\"https:\/\/habr.com\/ru\/articles\/488054\/\" rel=\"noopener noreferrer nofollow\"><em>\u0442\u0443\u0442<\/em><\/a><em>.<\/em><\/p>\n<p>\u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043a\u0443\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 \u0441 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435\u043c M2O \u0438\u043b\u0438 O2O. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0439 \u0442\u0430\u043a\u0438\u043c\u0438 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0441\u0442\u043e\u0438\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u044b\u0437\u043e\u0432 <code>select_related<\/code> \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044f \u0441 \u0442\u0430\u043a\u043e\u0439 \u0441\u0432\u044f\u0437\u044c\u044e. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u0432\u044b\u0448\u0435, \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0438 \u0432 \u0441\u0432\u044f\u0437\u044f\u0445 M2M \u0438\u043b\u0438 O2M, \u043d\u043e \u043e \u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u043e\u0437\u0436\u0435. <\/p>\n<p><a class=\"anchor\" name=\"%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0-%D0%B7%D0%B0%D0%BF%D1%80%D0%B0%D1%88%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC%D1%8B%D1%85-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85\" id=\"\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f-\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430-\u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445-\u0434\u0430\u043d\u043d\u044b\u0445\"><\/a><\/p>\n<h3>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>\u041f\u043e\u043a\u0430 \u0447\u0442\u043e, \u043d\u0430\u0441 \u0432\u0441\u0435 \u0435\u0449\u0435 \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 SQL \u0437\u0430\u043f\u0440\u043e\u0441, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0438\u0437 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432, \u0447\u0435\u043c \u043d\u0430\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e. <\/p>\n<p>\u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u044d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c<\/p>\n<p><strong>\u0412\u0430\u0440\u0438\u0430\u043d\u0442 1<\/strong> &#8212; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>defer<\/code> (\u043e\u0442\u0441\u0440\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u043e\u043b\u044f)<\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0440\u0435\u0434\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435, \u043d\u043e, \u0442\u0430\u043a\u0438\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u044b. \u0415\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u043b\u044f \u043c\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u043c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443, \u043d\u043e \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<pre><code class=\"python\">with CheckQueries():     foos = (         Foo.objects         .select_related(\"bar\")         .defer(\"long_field\", \"bar__long_field\")     )     # \u0418\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u0441\u044f     for foo in foos[:1000]: # SQL \u0437\u0430\u043f\u0440\u043e\u0441 1         # \u0410 \u0442\u0430\u043a\u0436\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 foo.bar.short_field         bar_short_field = foo.bar.short_field      # \u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0443 \u043d\u0430\u0441 \u0432\u0441\u0435 \u0435\u0449\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u0438\u043d SQL \u0437\u0430\u043f\u0440\u043e\u0441      # \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u0440\u0430\u0442\u0438\u043c\u0441\u044f \u043a \u043f\u043e\u043b\u044f\u043c, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u043e\u0442\u043b\u043e\u0436\u0438\u043b\u0438     foo_10_long_field = foos[10].long_field # SQL \u0437\u0430\u043f\u0440\u043e\u0441 2     foo_10_bar_long_field = foos[10].bar.long_field # SQL \u0437\u0430\u043f\u0440\u043e\u0441 3 <\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 3 SQL \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SQL \u0437\u0430\u043f\u0440\u043e\u0441 1 SELECT \"minimum_foo\".\"id\",        \"minimum_foo\".\"short_field\",        \"minimum_foo\".\"bar_id\",        \"minimum_bar\".\"id\",        \"minimum_bar\".\"short_field\" FROM \"minimum_foo\" INNER JOIN \"minimum_bar\" ON (\"minimum_foo\".\"bar_id\" = \"minimum_bar\".\"id\") LIMIT 1000 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.008s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 2 SELECT \"minimum_foo\".\"id\",        \"minimum_foo\".\"long_field\" FROM \"minimum_foo\" WHERE \"minimum_foo\".\"id\" = 11 LIMIT 21 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.001s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 3 SELECT \"minimum_bar\".\"id\",        \"minimum_bar\".\"long_field\" FROM \"minimum_bar\" WHERE \"minimum_bar\".\"id\" = 20011 LIMIT 21 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000s<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0422\u0443\u0442 \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430, \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u043f\u043e\u043b\u044e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u044b\u043b\u043e \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043e, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0433\u043e\u0434\u043d\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0434\u043b\u044f \u043c\u0430\u043b\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438\u0437 \u0432\u0441\u0435\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043d\u0443\u0436\u043d\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439, \u0438, \u0432 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f, \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438, \u0438\u0437\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\/\u0438\u043b\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u044b python \u0432\u044b\u0448\u0435 \u0447\u0435\u043c \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u043e\u043b\u0435\u0439 \u0434\u043b\u044f \u0447\u0430\u0441\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438\u0437 \u0432\u044b\u0431\u043e\u0440\u043a\u0438.<\/p>\n<p>\u0412\u043e\u0442 \u043f\u043e\u043b\u043d\u0430\u044f <a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/models\/querysets\/#defer\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a> \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043c\u0435\u0442\u043e\u0434\u0443. <\/p>\n<p><strong>\u0412\u0430\u0440\u0438\u0430\u043d\u0442 2<\/strong> &#8212; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>only<\/code> (\u044f\u0432\u043d\u043e\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043f\u043e\u043b\u0435\u0439)<\/p>\n<pre><code class=\"python\">with CheckQueries():     queryset = Foo.objects.select_related(\"bar\").only(\"bar__short_field\")     for foo in queryset[:1000]: # SQL \u0437\u0430\u043f\u0440\u043e\u0441 1         # \u0410 \u0442\u0430\u043a\u0436\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 foo.bar.short_field         bar_short_field = foo.bar.short_field<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 1 SQL \u0437\u0430\u043f\u0440\u043e\u0441<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SELECT \"minimum_foo\".\"id\",        \"minimum_foo\".\"bar_id\",        \"minimum_bar\".\"id\",        \"minimum_bar\".\"short_field\" FROM \"minimum_foo\" INNER JOIN \"minimum_bar\" ON (\"minimum_foo\".\"bar_id\" = \"minimum_bar\".\"id\") LIMIT 1000 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.001s<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u043b\u0435 <code>id<\/code> \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 <code>defer<\/code> \u0438 <code>only<\/code> \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0443 \u043c\u043e\u0434\u0435\u043b\u0438 django \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432.<\/p>\n<p>\u041f\u043e\u043b\u044f <code>minimum_foo.bar_id<\/code> \u0438 <code>minimum_bar.id<\/code> \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b, \u043f\u043e \u0442\u043e\u0439 \u0436\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u043d\u043e \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u043f\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0443 <code>bar<\/code>. <\/p>\n<p>\u0422\u0443\u0442 \u0442\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434\u044b <code>defer<\/code> \u0438 <code>only<\/code> \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0445 \u0440\u0430\u0437\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0439 \u0438\u0445 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435  \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 <a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/models\/querysets\/#only\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>. <\/p>\n<p><strong>\u0412\u0430\u0440\u0438\u0430\u043d\u0442 3<\/strong> &#8212; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>values<\/code> (\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u0439 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 django)<\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435 \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u043d\u043e \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u0440\u044f\u0434 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439. \u0412 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0441 \u043d\u0438\u043c \u0443 \u0432\u0430\u0441 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u0432 <code>QuerySet<\/code>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u044b \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0432\u0441\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u044c.<\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u043e\u0433\u043e, \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 <code>values<\/code> \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c <code>select_related<\/code>, \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u041f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u044f\u044e <a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/models\/querysets\/#values\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e<\/a> \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u043b\u044f \u0441\u043f\u0440\u0430\u0432\u043a\u0438.<\/p>\n<pre><code class=\"python\">with CheckQueries():     # \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 bar__* \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 values, \u0442\u0430\u0431\u043b\u0438\u0446\u0430 Bar \u0431\u0443\u0434\u0435\u0442     # \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0430 \u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0443     queryset = Foo.objects.values(\"short_field\", \"bar__short_field\")[:1000]     for foo in queryset[:1000]: # SQL \u0437\u0430\u043f\u0440\u043e\u0441 1         # \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 foo \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f         # \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e         short_field = foo[\"short_field\"]         bar_short_field = foo[\"bar__short_field\"]<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 SQL<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SELECT \"minimum_foo\".\"short_field\" AS \"short_field\",        \"minimum_bar\".\"short_field\" AS \"bar__short_field\" FROM \"minimum_foo\" INNER JOIN \"minimum_bar\" ON (\"minimum_foo\".\"bar_id\" = \"minimum_bar\".\"id\") LIMIT 1000 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.001 s<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0417\u0434\u0435\u0441\u044c \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e \u043c\u044b \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u043f\u043e\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u043b\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0431\u043e\u043b\u0435\u0435 \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. <\/p>\n<p><strong>\u0412\u0430\u0440\u0438\u0430\u043d\u0442 4<\/strong> &#8212; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>values_list<\/code> (\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 django)<\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0435\u0449\u0435 \u0431\u043e\u043b\u0435\u0435 \u044d\u043a\u043e\u043d\u043e\u043c\u043d\u044b\u0439 \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043b\u044e\u0447\u0438 \u0441\u043b\u043e\u0432\u0430\u0440\u044f, \u0447\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u043b\u0435\u0439 \u0438 \u043d\u0430 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0435.<\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 <code>values_list<\/code> \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 <code>select_related<\/code>. <a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/models\/querysets\/#values-list\" rel=\"noopener noreferrer nofollow\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a> \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u043b\u044f \u0441\u043f\u0440\u0430\u0432\u043a\u0438.<\/p>\n<pre><code class=\"python\"># \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 bar__* \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 values, \u0442\u0430\u0431\u043b\u0438\u0446\u0430 Bar \u0431\u0443\u0434\u0435\u0442 # \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0430 \u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0443 queryset = Foo.objects.values_list(\"short_field\", \"bar__short_field\") for foo in queryset[:1000]: # SQL \u0437\u0430\u043f\u0440\u043e\u0441 1     # \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 foo \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f     # \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e     short_field, bar_short_field = foo<\/code><\/pre>\n<p>SQL \u0442\u0443\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u0432\u044b\u0437\u043e\u0432\u0443 <code>values<\/code>.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435, \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439, \u0435\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u043e\u0434\u043d\u043e \u043f\u043e\u043b\u0435. \u0414\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e, \u0435\u0441\u043b\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u043e\u043b\u044c\u043a\u043e <code>id<\/code> \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.<\/p>\n<pre><code class=\"python\">bar_ids_queryset = Foo.objects.values_list(\"bar_id\", flat=True)[:10] list(bar_ids_queryset) # [20001, 20002, 20003, 20004, 20005, 20006, 20007, 20008, 20009, 20010]<\/code><\/pre>\n<p><strong>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438.<\/strong><\/p>\n<p>\u041d\u0435 \u043e\u0442\u0445\u043e\u0434\u044f \u0434\u0430\u043b\u0435\u043a\u043e \u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0432\u044b\u0448\u0435, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c, \u0430 \u043d\u0430 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438. \u0414\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<pre><code class=\"python\"># ALL get_size(list(Foo.objects.select_related(\"bar\"))) # '89.65 MB, 91797.45 KB'  # ONLY get_size(list(     Foo.objects.select_related(\"bar\")     .only(\"short_field\", \"bar__short_field\") )) # '10.61 MB, 10859.90 KB'  # VALUES get_size(list(Foo.objects.values(\"short_field\", \"bar__short_field\"))) # '3.97 MB, 4062.67 KB'  # VALUES_LIST get_size(list(Foo.objects.values_list(\"short_field\", \"bar__short_field\"))) # '2.75 MB, 2812.55 KB'<\/code><\/pre>\n<p>\u0414\u0443\u043c\u0430\u044e, \u0442\u0443\u0442 \u0446\u0438\u0444\u0440\u044b \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u0437\u0430 \u0441\u0435\u0431\u044f. \u0415\u0441\u043b\u0438 \u0432\u0430\u0448\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445, \u0432\u0430\u043c \u0441\u0442\u043e\u0438\u0442 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 <code>values<\/code> \u0438 <code>values_list<\/code>.<\/p>\n<p><a class=\"anchor\" name=\"%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%BF%D0%BE-%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8-%D0%B4%D0%BB%D1%8F-%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2\" id=\"\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f-\u043f\u043e-\u043f\u0430\u043c\u044f\u0442\u0438-\u0434\u043b\u044f-\u0431\u043e\u043b\u044c\u0448\u0438\u0445-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432\"><\/a><\/p>\n<h3>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432<\/h3>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c <code>iterator<\/code>. \u0414\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0437 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u0447\u0430\u0441\u0442\u044f\u043c. \u042d\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442 \u043d\u0443\u0436\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0431\u0430\u0437\u044b.<\/p>\n<pre><code class=\"python\">with CheckQueries():     queryset = Foo.objects.values(\"short_field\", \"bar__short_field\")     for foo in queryset.iterator(chunk_size=1000):         ...<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 <code>iterator<\/code>, \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443. \u0423 \u0432\u0430\u0441 \u043b\u0438\u0431\u043e \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 \u043a\u0443\u0440\u0441\u043e\u0440\u044b, \u043b\u0438\u0431\u043e \u043d\u0435\u0442. \u0422\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 PostgreSQL \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u0432, \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 <code>DISABLE_SERVER_SIDE_CURSORS<\/code> \u0431\u044b\u043b\u043e \u0440\u0430\u0432\u043d\u043e <code>False<\/code>. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 <a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/models\/querysets\/#iterator\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>.<\/p>\n<details class=\"spoiler\">\n<summary>SQL \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c\u0438 \u043a\u0443\u0440\u0441\u043e\u0440\u0430\u043c\u0438<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">DECLARE \"_django_curs_134432763113728_sync_1\" NO SCROLL CURSOR WITH HOLD FOR SELECT \"minimum_foo\".\"short_field\" AS \"short_field\",        \"minimum_bar\".\"short_field\" AS \"bar__short_field\" FROM \"minimum_foo\" INNER JOIN \"minimum_bar\" ON (\"minimum_foo\".\"bar_id\" = \"minimum_bar\".\"id\")<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>SQL \u0431\u0435\u0437 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SELECT \"minimum_foo\".\"short_field\" AS \"short_field\",        \"minimum_bar\".\"short_field\" AS \"bar__short_field\" FROM \"minimum_foo\" INNER JOIN \"minimum_bar\" ON (\"minimum_foo\".\"bar_id\" = \"minimum_bar\".\"id\")<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0422\u0430\u043a\u0436\u0435, \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 django \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u0437\u0430\u043f\u0438\u0441\u044f\u043c \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e.<\/p>\n<pre><code class=\"python\">queryset = Foo.objects.values_list(\"short_field\", \"bar__short_field\") async for foo in queryset.aiterator(chunk_size=1000):     ...<\/code><\/pre>\n<p>\u041d\u043e \u0437\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u0440\u044f\u0434 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0435\u0439 \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 <a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/topics\/async\/#async-safety\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>.<\/p>\n<p><a class=\"anchor\" name=\"%D0%BF%D1%80%D0%BE%D1%87%D0%B8%D0%B5-%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D1%8B-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8\" id=\"\u043f\u0440\u043e\u0447\u0438\u0435-\u043c\u0435\u0442\u043e\u0434\u044b-\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438\"><\/a><\/p>\n<h3>\u041f\u0440\u043e\u0447\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/h3>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0449\u0435 \u043f\u0430\u0440\u0443 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043f\u043e\u043c\u0438\u043c\u043e \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u0432\u044b\u0448\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445, \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u044c \u0432\u0430\u0448\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.<\/p>\n<p>\u0417\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u0430 \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438\u043b\u0438 \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c.<\/p>\n<p><strong>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430.<\/strong><\/p>\n<pre><code class=\"python\"># \u0415\u0441\u043b\u0438 \u043d\u0430\u0441 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e # \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0441\u0430\u043c\u044b\u043c \u043b\u0443\u0447\u0448\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c # \u043c\u0435\u0442\u043e\u0434 count with CheckQueries():     count = Foo.objects.count()<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 SQL<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SELECT COUNT(*) AS \"__count\" FROM \"minimum_foo\" \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.002 s<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 <code>count<\/code> \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u044b\u043c \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439.<\/p>\n<pre><code class=\"python\"># \u0412\u043e\u0442 \u043f\u043b\u043e\u0445\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 with CheckQueries():     queryset = Foo.objects.all()     count = queryset.count() # SQL \u0437\u0430\u043f\u0440\u043e\u0441 1     foos = list(queryset) # SQL \u0437\u0430\u043f\u0440\u043e\u0441 2<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 2 SQL \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SQL \u0437\u0430\u043f\u0440\u043e\u0441 1 SELECT COUNT(*) AS \"__count\" FROM \"minimum_foo\" \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.001 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 2 SELECT \"minimum_foo\".\"id\",        \"minimum_foo\".\"short_field\",        \"minimum_foo\".\"long_field\",        \"minimum_foo\".\"bar_id\" FROM \"minimum_foo\" \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.048 s<\/code><\/pre>\n<\/div>\n<\/details>\n<pre><code class=\"python\"># \u0410 \u0432\u043e\u0442 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 with CheckQueries():     queryset = Foo.objects.all()     foos = list(queryset) # SQL \u0437\u0430\u043f\u0440\u043e\u0441 1     count = queryset.count()<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e 1 \u0437\u0430\u043f\u0440\u043e\u0441<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SELECT \"minimum_foo\".\"id\",        \"minimum_foo\".\"short_field\",        \"minimum_foo\".\"long_field\",        \"minimum_foo\".\"bar_id\" FROM \"minimum_foo\" \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.035 s<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043a\u0430\u0437\u0443\u0441\u043e\u0432, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>len<\/code>, \u0430 \u043d\u0435 \u043c\u0435\u0442\u043e\u0434 <code>QuerySet.count<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u0438\u0442\u044c\u0441\u044f \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f.<\/p>\n<pre><code class=\"python\"># \u0415\u0441\u043b\u0438 \u043c\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439, # \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c QuerySet \u0432 \u0441\u043f\u0438\u0441\u043e\u043a, \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e # \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441 with CheckQueries():     queryset = Foo.objects.all()     count = len(queryset) # SQL \u0437\u0430\u043f\u0440\u043e\u0441 1     # \u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0431\u0443\u0434\u0435\u0442     # \u0437\u0430\u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d \u0432 queryset \u0438 \u043f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u043e\u0446\u0435\u043d\u043a\u0435     # Queryset \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0438\u0437 \u043a\u044d\u0448\u0430     foos = list(queryset)<\/code><\/pre>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0432\u044b\u0437\u043e\u0432\u043e\u043c <code>count<\/code> \u043f\u043e\u0441\u043b\u0435 \u043e\u0446\u0435\u043d\u043a\u0438 <code>QuerySet<\/code>, \u0432\u043c\u0435\u0441\u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>len<\/code> \u043d\u0430 \u043a\u044d\u0448\u0435 \u0443\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u0437 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430.<\/p>\n<p>\u041f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0432 <code>QuerySet<\/code>, \u0432\u0430\u043c \u0442\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u0431\u044b\u0442\u044c \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u044b\u043c\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0446\u0435\u043d\u0435\u043d\u043d\u044b\u0435 <code>QuerySet<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u043e\u043b\u0435\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f (\u043c\u0435\u0442\u043e\u0434 <code>iterator<\/code> \u043a\u0430\u043a \u0440\u0430\u0437 \u043d\u0435 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u043a\u044d\u0448). \u041f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u043e\u0433\u043e, \u0443\u0447\u0442\u0438\u0442\u0435, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 <code>QuerySet<\/code> \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u043a-\u043b\u0438\u0431\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d (\u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 <code>QuerySet<\/code>), \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u044b \u0438\u0437 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u0446\u0435\u043d\u043a\u0435.<\/p>\n<p>\u0415\u0449\u0435 \u043e\u0434\u043d\u0438\u043c \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u043c \u0441\u043b\u0443\u0447\u0430\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u043f\u0430\u0433\u0438\u043d\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0430\u043c \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u0433\u043e\u0434\u043d\u0435\u0435 \u0434\u0435\u043b\u0430\u0442\u044c 2 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<pre><code class=\"python\">with CheckQueries():     total = Foo.objects.count() # SQL \u0437\u0430\u043f\u0440\u043e\u0441 1     page = Foo.objects.values_list(\"id\", flat=True)[10:20]     print(f\"Total: {total} PageIds:{list(page)}\") # SQL \u0437\u0430\u043f\u0440\u043e\u0441 2  # Total: 10000 PageIds:[11, 12, 13, 14, 15, 16, 17, 18, 19, 20]<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 2 SQL \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\"># SQL \u0437\u0430\u043f\u0440\u043e\u0441 1 SELECT COUNT(*) AS \"__count\" FROM \"minimum_foo\" # \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.001 s # -------------------- # SQL \u0437\u0430\u043f\u0440\u043e\u0441 2 SELECT \"minimum_foo\".\"id\" AS \"id\" FROM \"minimum_foo\" LIMIT 10 OFFSET 10 # \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000 s<\/code><\/pre>\n<\/div>\n<\/details>\n<p><strong>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439.<\/strong><\/p>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c, \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0447\u0442\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 <code>count<\/code>. \u0415\u0441\u043b\u0438 \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>exists<\/code>.<\/p>\n<pre><code class=\"python\">with CheckQueries():     # \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0435\u0439     exists = Foo.objects.exists()<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 SQL<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">SELECT 1 AS \"a\" FROM \"minimum_foo\" LIMIT 1 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.001 s<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 <code>first<\/code> \u0438\u043b\u0438 <code>last<\/code> \u0432 \u0432\u0438\u0434\u0443 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0438\u0437\u0434\u0435\u0440\u0436\u0435\u043a \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p><strong>\u041d\u041e<\/strong>, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438, \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0438, \u0442\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>exists<\/code> \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430, \u0442\u0430\u043a \u043a\u0430\u043a, \u043f\u043e\u043c\u0438\u043c\u043e \u043d\u0435\u0433\u043e, \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0435\u0439.<\/p>\n<p><strong>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \/ \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0438.<\/strong><\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0432\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445.  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b: <code>first<\/code> \u0438 <code>last<\/code>.<\/p>\n<pre><code class=\"python\">with CheckQueries():     # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c     first = Foo.objects.values(\"id\").first() # SQL \u0437\u0430\u043f\u0440\u043e\u0441 1     # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0437\u0430\u043f\u0438\u0441\u044c     last = Foo.objects.values(\"id\").last() # SQL \u0437\u0430\u043f\u0440\u043e\u0441 2<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 2 \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SQL \u0437\u0430\u043f\u0440\u043e\u0441 1 SELECT \"minimum_foo\".\"id\" AS \"id\" FROM \"minimum_foo\" ORDER BY \"minimum_foo\".\"id\" ASC LIMIT 1 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.001 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 2 SELECT \"minimum_foo\".\"id\" AS \"id\" FROM \"minimum_foo\" ORDER BY \"minimum_foo\".\"id\" DESC LIMIT 1 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000 s<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0422\u0430\u043a\u0436\u0435, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043c\u0435\u0442\u043e\u0434\u044b <code>latest<\/code> \u0438 <code>earliest<\/code>, \u043d\u043e, \u0434\u043b\u044f \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f,<br \/>\u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 <code>Meta<\/code> \u0432\u0430\u0448\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 <code>get_latest_by<\/code> \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u043d\u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 <a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/models\/querysets\/#latest\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>. <\/p>\n<p><a class=\"anchor\" name=\"%D0%B8%D1%82%D0%BE%D0%B3%D0%B8-%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B-1\" id=\"\u0438\u0442\u043e\u0433\u0438-\u0433\u043b\u0430\u0432\u044b-1\"><\/a><\/p>\n<h3>\u0418\u0442\u043e\u0433\u0438 \u0433\u043b\u0430\u0432\u044b<\/h3>\n<p>\u0417\u0430\u0444\u0438\u043d\u0430\u043b\u0438\u043c \u0434\u0430\u043d\u043d\u0443\u044e \u0433\u043b\u0430\u0432\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0432\u044b\u0432\u043e\u0434\u0430\u043c\u0438:<\/p>\n<ol>\n<li>\n<p>\u0412\u0441\u0435\u0433\u0434\u0430 \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>select_related<\/code> \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043f\u043e\u043b\u044f\u043c \u0441 <code>ForeignKey<\/code> \u0438\u043b\u0438 <code>OneToOneField<\/code>, \u0435\u0441\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code>values<\/code> \u0438\u043b\u0438 <code>values_list<\/code><\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0447\u0430\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430, \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>only<\/code> \u0438\u043b\u0438 <code>defer<\/code><\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0435 \u043c\u043d\u043e\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u043c\u0435\u0442\u043e\u0434\u044b \u043c\u043e\u0434\u0435\u043b\u0438 django    \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <code>values<\/code> \u0438\u043b\u0438 <code>values_list<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0435 \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>iterator<\/code><\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0439\u0442\u0435 \u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 <code>count<\/code><\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0432\u0430\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <code>exists<\/code><\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0437\u0430\u043f\u0438\u0441\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <code>first<\/code> \u0438\u043b\u0438 <code>last<\/code><\/p>\n<\/li>\n<li>\n<p>\u0411\u0443\u0434\u044c\u0442\u0435 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u044b \u0441 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c <code>QuerySet<\/code><\/p>\n<\/li>\n<\/ol>\n<p><a class=\"anchor\" name=\"%D0%B1%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D1%8F-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\" id=\"\u0431\u0430\u0437\u043e\u0432\u0430\u044f-\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\"><\/a><\/p>\n<h2>\u0411\u0430\u0437\u043e\u0432\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f<\/h2>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0433\u043b\u0443\u0431\u0436\u0435 \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0432 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u0441\u0432\u044f\u0437\u044f\u043c\u0438.<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043c\u043e\u0434\u0443\u043b\u044f middle<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">from django.db import models from django.db.models import IntegerChoices from django.utils.translation import gettext_lazy as _  # \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438 # \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438  # \u041f\u043e\u043a\u0430 \u0447\u0442\u043e \u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0434\u0435\u0442\u0430\u043b\u0438 \u0432 \u0432\u0438\u0434\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, # \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f Meta.verbose_name \u0438 \u043f\u0440\u043e\u0447\u0435\u0433\u043e  # \u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u043b\u044f name. # \u0411\u0443\u0434\u0435\u043c \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043d\u0435\u0435 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438. class NameMixin(models.Model):     name = models.CharField(         verbose_name=_(\"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\"),         max_length=128     )      class Meta:         abstract = True   # \u0421\u0442\u0440\u0430\u043d\u0430 class Country(NameMixin): ...   # \u0420\u0435\u0433\u0438\u043e\u043d class Region(NameMixin):     country = models.ForeignKey(         Country,         verbose_name=_(\"\u0421\u0442\u0440\u0430\u043d\u0430\"),         on_delete=models.CASCADE     )   # \u0413\u043e\u0440\u043e\u0434 class City(NameMixin):     region = models.ForeignKey(         Region,         verbose_name=_(\"\u0420\u0435\u0433\u0438\u043e\u043d\"),         on_delete=models.CASCADE     )   # \u0427\u0430\u0441\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 class AddressPart(models.Model):     position = models.IntegerField(verbose_name=_(\"\u041f\u043e\u0437\u0438\u0446\u0438\u044f\"))     key = models.CharField(         verbose_name=_(\"\u041a\u043b\u044e\u0447\"),         max_length=64     )     value = models.CharField(         verbose_name=_(\"\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435\"),         max_length=64     )   # Enum \u0441 \u0442\u0438\u043f\u0430\u043c\u0438 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 class AddressType(IntegerChoices):     FACT = 0, _(\"\u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439\")     LEGAL = 1, _(\"\u042e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0439\")     OTHER = 2, _(\"\u0414\u0440\u0443\u0433\u043e\u0439\")   # \u0410\u0434\u0440\u0435\u0441 class Address(models.Model):     # \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c 3 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c     # \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0430\u0434\u0440\u0435\u0441\u0430. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432\u0441\u0435\u0433\u043e 2 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 Enum,      # \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0438 BooleanField, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a      # is_legal = models.BooleanField(     #     verbose_name=_(\"\u042e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0434\u0440\u0435\u0441\"),     #     default=False     # )      # \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u043b\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c     # \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0438\u043f\u043e\u0432 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0432 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438,     # \u0442\u043e\u0433\u0434\u0430 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0434\u043b\u044f     # \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432 \u0430\u0434\u0440\u0435\u0441\u043e\u0432.      # type = models.ForeignKey(     #     AddressTypeModel,     #     verbose_name=_(\"\u0422\u0438\u043f \u0430\u0434\u0440\u0435\u0441\u0430\"),     #     on_delete=models.PROTECT     # )      # \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u0440\u0435\u0442\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Enum     type = models.SmallIntegerField(         verbose_name=_(\"\u0422\u0438\u043f \u0430\u0434\u0440\u0435\u0441\u0430\"),         choices=AddressType.choices     )      # \u0422\u0443\u0442 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c M2M \u0441\u0432\u044f\u0437\u044c, \u043d\u043e, \u0432     # \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0437\u0434\u0435\u0441\u044c \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c     # django.contrib.postgres.fields.ArrayField     # \u043b\u0438\u0431\u043e models.JSONField, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e     # \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b Address, \u0438 \u043d\u0443\u0436\u043d\u044b \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430     parts = models.ManyToManyField(         AddressPart,         verbose_name=_(\"\u0427\u0430\u0441\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0430\")     )      # \u0417\u0434\u0435\u0441\u044c \u0441\u0441\u044b\u043b\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u0433\u043e\u0440\u043e\u0434. \u0413\u043e\u0440\u043e\u0434 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0440\u0435\u0433\u0438\u043e\u043d.     # \u0420\u0435\u0433\u0438\u043e\u043d \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0443. \u0412 \u0446\u0435\u043b\u043e\u043c, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e     # \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439     # \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446, \u0438 \u0432\u0430\u0441 \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u043e\u043b\u043d\u0443\u0435\u0442 \u043c\u0435\u0441\u0442\u043e     # \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0441\u0432\u044f\u0437\u0438 \u0438 \u0437\u0434\u0435\u0441\u044c     city = models.ForeignKey(         City,         verbose_name=_(\"\u0413\u043e\u0440\u043e\u0434\"),         on_delete=models.CASCADE     )   # \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f class Company(NameMixin):     addresses = models.ManyToManyField(         Address,         verbose_name=_(\"\u0410\u0434\u0440\u0435\u0441\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438\")     ) <\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\"># \u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0444\u044d\u0439\u043a\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 from django.db import transaction import factory from factory.django import DjangoModelFactory from factory.fuzzy import FuzzyText  from middle.models import (     Company, Address, AddressPart,      City, Region, Country, AddressType )   # \u0424\u0430\u0431\u0440\u0438\u043a\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u0430\u043d class CountryFactory(DjangoModelFactory):     name = FuzzyText(length=15)      class Meta:         model = Country   # \u0424\u0430\u0431\u0440\u0438\u043a\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432 class RegionFactory(DjangoModelFactory):     name = FuzzyText(length=30)     # \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0430\u043d\u044b     country = factory.Iterator(Country.objects.all())      class Meta:         model = Region   # \u0424\u0430\u0431\u0440\u0438\u043a\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0433\u043e\u0440\u043e\u0434\u043e\u0432 class CityFactory(DjangoModelFactory):     name = FuzzyText(length=20)     # \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u043e\u043d\u044b     region = factory.Iterator(Region.objects.all())      class Meta:         model = City   # \u0424\u0430\u0431\u0440\u0438\u043a\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u0435\u0439 \u0430\u0434\u0440\u0435\u0441\u0430 class AddressPartFactory(DjangoModelFactory):     # \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0430\u0434\u0440\u0435\u0441\u043e\u0432     position = factory.Iterator([1, 2, 3, 4])     key = factory.Iterator([\"\u0443\u043b\", \"\u0434\", \"\u043a\", \"\u043a\u0432\"])     value = FuzzyText(length=20)      class Meta:         model = AddressPart   # \u0424\u0430\u0431\u0440\u0438\u043a\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0432\u044f\u0437\u0435\u0439 \u043c\u0435\u0436\u0434\u0443 \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0438 \u0435\u0433\u043e \u0447\u0430\u0441\u0442\u044c\u044e class AddressAddressPartFactory(DjangoModelFactory):     addresspart = factory.SubFactory(AddressPartFactory)      class Meta:         model = Address.parts.through   # \u0424\u0430\u0431\u0440\u0438\u043a\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u043e\u0432 class AddressFactory(DjangoModelFactory):     type = factory.Iterator(AddressType.values)     # \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u043e 4 \u0447\u0430\u0441\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u043e\u0432     parts = factory.RelatedFactoryList(         AddressAddressPartFactory,         factory_related_name=\"address\",         size=4     )     # \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u0433\u043e\u0440\u043e\u0434\u0430     city = factory.Iterator(City.objects.all())      class Meta:         model = Address   # \u0424\u0430\u0431\u0440\u0438\u043a\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0432\u044f\u0437\u0435\u0439 \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 \u0438 \u0430\u0434\u0440\u0435\u0441\u043e\u043c class CompanyAddressFactory(DjangoModelFactory):     address = factory.SubFactory(AddressFactory)      class Meta:         model = Company.addresses.through   class CompanyFactory(DjangoModelFactory):     name = FuzzyText(length=30)     # \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u043e 3 \u0430\u0434\u0440\u0435\u0441\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438     addresses = factory.RelatedFactoryList(         CompanyAddressFactory,          factory_related_name=\"company\",         size=3     )      class Meta:         model = Company   @transaction.atomic def create_test_data():     # \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c 20 \u0441\u0442\u0440\u0430\u043d     CountryFactory.create_batch(20)     # \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c 100 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432     RegionFactory.create_batch(100)     # \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c 1000 \u0433\u043e\u0440\u043e\u0434\u043e\u0432     CityFactory.create_batch(1000)     # \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c 10000 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439 \u0441 3 \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439     CompanyFactory.create_batch(10000)   create_test_data()<\/code><\/pre>\n<\/div>\n<\/details>\n<p><a class=\"anchor\" name=\"%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%B4%D0%BB%D1%8F-m2m-%D0%B8-o2m-%D1%81%D0%B2%D1%8F%D0%B7%D0%B5%D0%B9\" id=\"\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f-\u0434\u043b\u044f-m2m-\u0438-o2m-\u0441\u0432\u044f\u0437\u0435\u0439\"><\/a><\/p>\n<h3>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f M2M \u0438 O2M \u0441\u0432\u044f\u0437\u0435\u0439<\/h3>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c \u0443\u0436\u0435 \u043d\u0430\u0447\u0430\u0442\u0443\u044e \u0442\u0435\u043c\u0443 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u043c\u043f\u043e\u0440\u0442\u044b \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0433\u043b\u0430\u0432\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">from pprint import pprint  from django.db.models import Prefetch, QuerySet, F, Value from django.db.models.functions import Concat  from middle.models import (     Company, AddressType, Address,     AddressPart, Country, City ) from minimum.scripts.utils import CheckQueries<\/code><\/pre>\n<\/div>\n<\/details>\n<pre><code class=\"python\"># \u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u0443\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043b\u044f \u0441 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435\u043c M2M. # \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 with CheckQueries():     # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439     company = Company.objects.first() # SQL \u0437\u0430\u043f\u0440\u043e\u0441 1      # \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0434\u0440\u0435\u0441     address = company.addresses.get(type=AddressType.FACT) # SQL \u0437\u0430\u043f\u0440\u043e\u0441 2     city = address.city # SQL \u0437\u0430\u043f\u0440\u043e\u0441 3     region = city.region # SQL \u0437\u0430\u043f\u0440\u043e\u0441 4     country = region.country # SQL \u0437\u0430\u043f\u0440\u043e\u0441 5      # \u0427\u0430\u0441\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u044f\u043c     address_parts = address.parts.order_by(\"-position\") # SQL \u0437\u0430\u043f\u0440\u043e\u0441 6      pprint({         \"\u0421\u0442\u0440\u0430\u043d\u0430\": country.name,         \"\u0420\u0435\u0433\u0438\u043e\u043d\": region.name,         \"\u0413\u043e\u0440\u043e\u0434\": city.name,         # \u0422\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0447\u0430\u0441\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u043e\u0432         **{part.key: part.value for part in address_parts},     })  # {'\u0413\u043e\u0440\u043e\u0434': 'qBPOWMylkgqjzwVHbOKx', #  '\u0420\u0435\u0433\u0438\u043e\u043d': 'DFFCvrMwZaMHKtCkUGxOzPnKvSQvGs', #  '\u0421\u0442\u0440\u0430\u043d\u0430': 'hUtCDtXieLKLXox', #  '\u0443\u043b': 'urAVQxDYxsVxLSkDkUQl'} #  '\u043a\u0432': 'oMKiAakyCoJJuYEdUkMd', #  '\u043a': 'emyuXPNEdmGhcnSyMdRc', #  '\u0434': 'ccPkAGylpvSxIZNbOIbW', # \u041e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043c\u044b \u0434\u043e\u0431\u0438\u043b\u0438\u0441\u044c<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 SQL<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SQL \u0437\u0430\u043f\u0440\u043e\u0441 1 SELECT \"middle_company\".\"id\",        \"middle_company\".\"name\" FROM \"middle_company\" ORDER BY \"middle_company\".\"id\" ASC LIMIT 1 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.001 s -------------------- \u0422\u0443\u0442 \u0435\u0441\u0442\u044c INNER JOIN \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0432\u044f\u0437\u044c  M2M \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443  SQL \u0437\u0430\u043f\u0440\u043e\u0441 2 SELECT \"middle_address\".\"id\",        \"middle_address\".\"type\",        \"middle_address\".\"city_id\" FROM \"middle_address\" INNER JOIN \"middle_company_addresses\" ON (\"middle_address\".\"id\" = \"middle_company_addresses\".\"address_id\") WHERE (\"middle_company_addresses\".\"company_id\" = 1        AND \"middle_address\".\"type\" = 0) LIMIT 21 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 3 SELECT \"middle_city\".\"id\",        \"middle_city\".\"name\",        \"middle_city\".\"region_id\" FROM \"middle_city\" WHERE \"middle_city\".\"id\" = 1 LIMIT 21 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 4 SELECT \"middle_region\".\"id\",        \"middle_region\".\"name\",        \"middle_region\".\"country_id\" FROM \"middle_region\" WHERE \"middle_region\".\"id\" = 1 LIMIT 21 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 5 SELECT \"middle_country\".\"id\",        \"middle_country\".\"name\" FROM \"middle_country\" WHERE \"middle_country\".\"id\" = 1 LIMIT 21 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 6 SELECT \"middle_addresspart\".\"id\",        \"middle_addresspart\".\"position\",        \"middle_addresspart\".\"key\",        \"middle_addresspart\".\"value\" FROM \"middle_addresspart\" INNER JOIN \"middle_address_parts\" ON (\"middle_addresspart\".\"id\" = \"middle_address_parts\".\"addresspart_id\") WHERE \"middle_address_parts\".\"address_id\" = 1 ORDER BY \"middle_addresspart\".\"position\" ASC \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000 s<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 6 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u0443\u043c\u0430\u044e, \u044d\u0442\u043e \u0443\u0436\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043d\u0443\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u043e,  \u043d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0435\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u043e \u0432\u0441\u0435\u0445 \u0430\u0434\u0440\u0435\u0441\u0430\u0445 \u0434\u043b\u044f 10 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439.<\/p>\n<pre><code class=\"python\"># \u0417\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0432\u0435\u0434\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e with CheckQueries(count_only=True):     # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439     companies = Company.objects.all()[:10]     for company in companies:         # \u0418\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0430\u043c         for address in company.addresses.all():             city = address.city             region = city.region             country = region.country             address_parts = list(address.parts.order_by(\"position\"))  # \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432: 131<\/code><\/pre>\n<p>\u0414\u0443\u043c\u0430\u044e, 131 \u0437\u0430\u043f\u0440\u043e\u0441 \u044d\u0442\u043e \u044f\u0432\u043d\u043e \u043c\u043d\u043e\u0433\u043e, \u0445\u043e\u0442\u044f \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u043c\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u0430\u0434\u0440\u0435\u0441\u0430 10 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439. <\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043c\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u043d\u0435 \u043b\u0443\u0447\u0448\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u043e \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u0443 \u0432\u0430\u0441 \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0441\u0432\u044f\u0437\u0438 \u043f\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c.<\/p>\n<p>\u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u0445 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 <code>select_related<\/code> \u0434\u043b\u044f \u044f\u0432\u043d\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e \u0441\u0432\u044f\u0437\u044f\u043c\u0438 M2O \u0438 O2O, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0443\u0442 \u043d\u0430\u043c \u0435\u0433\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.<\/p>\n<p>\u0414\u043b\u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>prefetch_related<\/code>. \u0414\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0441\u0432\u044f\u0437\u0435\u0439 \u043b\u0438\u0431\u043e \u043e\u0431\u044a\u0435\u043a\u0442 <code>Prefetch<\/code>. \u0422\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e <code>prefetch_related<\/code> \u0438 <code>select_related<\/code> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u0435.<\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u0435\u043b\u0430\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u043a\u044d\u0448 <code>QuerySet<\/code> \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u0443\u0436\u0435 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 django.<\/p>\n<pre><code class=\"python\">with CheckQueries():     # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439     first_company, second_company = (         Company.objects.prefetch_related(\"addresses\")[:2]     ) # SQL \u0437\u0430\u043f\u0440\u043e\u0441\u044b 1 \u0438 2      # \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438     # \u041d\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0443\u0442,     # \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430.     first_company_addresses = list(first_company.addresses.all())      # \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0442\u0438\u043f \u0430\u0434\u0440\u0435\u0441\u0430 \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438,     # \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d, \u0442\u0430\u043a \u043a\u0430\u043a QuerySet \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f     # \u0438 \u043a\u044d\u0448, \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 prefetch_related \u0431\u043e\u043b\u0435\u0435 \u043d\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u0435\u043d \u0434\u043b\u044f     # \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0432\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438     second_company_fact_address = (         second_company.addresses.get(type=AddressType.FACT)     ) # SQL \u0437\u0430\u043f\u0440\u043e\u0441 3      # \u0412 \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 python     first_company_fact_address = next(filter(         lambda address: address.type == AddressType.FACT,         first_company_addresses     ))      # \u041f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u043e\u0431\u0440\u0430\u0442\u0438\u043c\u0441\u044f \u043a \u0433\u043e\u0440\u043e\u0434\u0443 \u043b\u044e\u0431\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430, \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d     # \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435     # SQL \u0437\u0430\u043f\u0440\u043e\u0441 4     first_company_fact_address_city = first_company_fact_address.city     # \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0438\u043c\u0435\u043d\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0441\u043e \u0441\u0432\u044f\u0437\u044c\u044e M2M \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e <\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 4 \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SQL \u0437\u0430\u043f\u0440\u043e\u0441 1 SELECT \"middle_company\".\"id\",        \"middle_company\".\"name\" FROM \"middle_company\" LIMIT 2 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.001 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 2 SELECT (\"middle_company_addresses\".\"company_id\") AS \"_prefetch_related_val_company_id\",        \"middle_address\".\"id\",        \"middle_address\".\"type\",        \"middle_address\".\"city_id\" FROM \"middle_address\" INNER JOIN \"middle_company_addresses\" ON (\"middle_address\".\"id\" = \"middle_company_addresses\".\"address_id\") WHERE \"middle_company_addresses\".\"company_id\" IN (1,                                                   2) \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.001 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 3 SELECT \"middle_address\".\"id\",        \"middle_address\".\"type\",        \"middle_address\".\"city_id\" FROM \"middle_address\" INNER JOIN \"middle_company_addresses\" ON (\"middle_address\".\"id\" = \"middle_company_addresses\".\"address_id\") WHERE (\"middle_company_addresses\".\"company_id\" = 2        AND \"middle_address\".\"type\" = 0) LIMIT 21 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.001 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 4 SELECT \"middle_city\".\"id\",        \"middle_city\".\"name\",        \"middle_city\".\"region_id\" FROM \"middle_city\" WHERE \"middle_city\".\"id\" = 1 LIMIT 21 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000 s<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432  \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u0433\u0434\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 131 \u0437\u0430\u043f\u0440\u043e\u0441.<\/p>\n<pre><code class=\"python\">def test_prefetch(count):     # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439     companies = Company.objects.prefetch_related(         # \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 Prefetch, \u043c\u044b \u043c\u043e\u0436\u0435\u043c         # \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 QuerySet, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0442\u0430\u043a\u0436\u0435         # \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c select_related \u0438 prefetch_related         Prefetch( # \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u0432\u0442\u043e\u0440\u043e\u0439 SQL \u0437\u0430\u043f\u0440\u043e\u0441             # \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0430\u0434\u0440\u0435\u0441\u0430 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439             \"addresses\",             # \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c QuerySet \u0434\u043b\u044f \u0430\u0434\u0440\u0435\u0441\u043e\u0432             Address.objects.select_related(                 # \u041f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u0437 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u0432\u044f\u0437\u0435\u0439                 \"city\",                 \"city__region\",                 \"city__region__country\",             ).prefetch_related(                 # \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0447\u0430\u0441\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439                 Prefetch( # \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u0442\u0440\u0435\u0442\u0438\u0439 SQL \u0437\u0430\u043f\u0440\u043e\u0441                     \"parts\",                     # \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 QuerySet                     AddressPart.objects.order_by(\"-position\")                 )             )         )     )     # \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043d\u0435 \u0432\u0430\u0436\u043d\u043e \u043f\u043e \u043a\u0430\u043a\u043e\u043c\u0443 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c     # \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432     for company in companies[:count]: # \u0417\u0430\u043f\u0440\u043e\u0441\u044b 1, 2 \u0438 3 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0437\u0434\u0435\u0441\u044c         # \u0418\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0430\u043c         for address in company.addresses.all():             city = address.city # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0433\u043e\u0440\u043e\u0434             region = city.region # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0440\u0435\u0433\u0438\u043e\u043d             country = region.country # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0442\u0440\u0430\u043d\u0443             # \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f             # \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0443\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u044d\u0442\u043e \u0432 Prefetch             address_parts = list(address.parts.all())  with CheckQueries():     test_prefetch(2) <\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e 3 \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SQL \u0437\u0430\u043f\u0440\u043e\u0441 1 (\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439) SELECT \"middle_company\".\"id\",        \"middle_company\".\"name\" FROM \"middle_company\" LIMIT 2 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 2 (Prefetch \u0434\u043b\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430) SELECT (\"middle_company_addresses\".\"company_id\") AS \"_prefetch_related_val_company_id\",        \"middle_address\".\"id\",        \"middle_address\".\"type\",        \"middle_address\".\"city_id\",        \"middle_city\".\"id\",        \"middle_city\".\"name\",        \"middle_city\".\"region_id\",        \"middle_region\".\"id\",        \"middle_region\".\"name\",        \"middle_region\".\"country_id\",        \"middle_country\".\"id\",        \"middle_country\".\"name\" FROM \"middle_address\" INNER JOIN \"middle_company_addresses\" ON (\"middle_address\".\"id\" = \"middle_company_addresses\".\"address_id\") INNER JOIN \"middle_city\" ON (\"middle_address\".\"city_id\" = \"middle_city\".\"id\") INNER JOIN \"middle_region\" ON (\"middle_city\".\"region_id\" = \"middle_region\".\"id\") INNER JOIN \"middle_country\" ON (\"middle_region\".\"country_id\" = \"middle_country\".\"id\") WHERE \"middle_company_addresses\".\"company_id\" IN (1, 2) \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.001 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 3 (Prefetch \u0447\u0430\u0441\u0442\u0435\u0439 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u044b\u0437\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0438 Address) SELECT (\"middle_address_parts\".\"address_id\") AS \"_prefetch_related_val_address_id\",        \"middle_addresspart\".\"id\",        \"middle_addresspart\".\"position\",        \"middle_addresspart\".\"key\",        \"middle_addresspart\".\"value\" FROM \"middle_addresspart\" INNER JOIN \"middle_address_parts\" ON (\"middle_addresspart\".\"id\" = \"middle_address_parts\".\"addresspart_id\") WHERE \"middle_address_parts\".\"address_id\" IN (1, 2, 3, 4, 5, 6) ORDER BY \"middle_addresspart\".\"position\" DESC \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000 s<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439,  \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u0430, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f.<\/p>\n<pre><code class=\"python\">with CheckQueries(count_only=True):     test_prefetch(2)  # \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432: 3  with CheckQueries(count_only=True):     test_prefetch(10000)  # \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432: 3 # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/code><\/pre>\n<p>\u0414\u0443\u043c\u0430\u044e, \u0432\u044b \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 <code>prefetch_related<\/code> \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0432\u043d\u0443\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u0438\u043c.<\/p>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e Pydantic \u043c\u043e\u0434\u0435\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u043f\u043e django \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438\u0445 \u0442\u0438\u043f\u043e\u0432, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u043e\u0447\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043a\u0430\u043a \u0432 <code>select_related<\/code> \u0442\u0430\u043a \u0438 \u0432  <code>prefetch_related<\/code>, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442 \u043a\u0430\u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443, \u0442\u0430\u043a \u0438 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u044f \u043d\u0435 \u043c\u043e\u0433\u0443 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u043c \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043a\u043e\u0434 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c, \u043d\u043e, \u044f \u0432\u0430\u0441 \u0443\u0432\u0435\u0440\u044f\u044e, \u0432\u044b \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u043e\u0436\u0430\u043b\u0435\u0435\u0442\u0435, \u0435\u0441\u043b\u0438 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0435\u0433\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435, \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0435\u0449\u0435 2 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <code>prefetch_related<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c <code>QuerySet<\/code>, \u0432 \u043f\u0440\u043e\u0447\u0435\u043c \u043a\u0430\u043a \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 <code>QuerySet<\/code>, \u0430 \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u043d\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0431\u0443\u0434\u0435\u0442, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u043d\u0435 \u043b\u0443\u0447\u0448\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u043e \u0437\u0430\u0442\u043e \u043e\u043d \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u044b\u0439.<\/p>\n<pre><code class=\"python\">companies = list(Company.objects.prefetch_related(     # \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u0430     Prefetch(         \"addresses\",         # \u0417\u0430\u043f\u0440\u043e\u0441\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430         Address.objects.filter(type=AddressType.FACT),         # \u0417\u0430\u043f\u0438\u0448\u0435\u043c \u0438\u0445 \u0432 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 django \u043c\u043e\u0434\u0435\u043b\u0438         to_attr=\"fact_addresses\"     ),     # \u0415\u0449\u0435 \u0440\u0430\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u0430,     # \u043d\u043e \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c     Prefetch(         \"addresses\",         # \u0417\u0430\u043f\u0440\u043e\u0441\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u044e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430         Address.objects.filter(type=AddressType.LEGAL),         # \u0417\u0430\u043f\u0438\u0448\u0435\u043c \u0438\u0445 \u0432 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 django \u043c\u043e\u0434\u0435\u043b\u0438         to_attr=\"legal_addresses\"     ), )[:2]) # \u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e 3 \u0437\u0430\u043f\u0440\u043e\u0441\u0430: \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439, # \u0437\u0430\u043f\u0440\u043e\u0441 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u044e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432  # \u0414\u0430\u043b\u0435\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 SQL \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 company = companies[0]  # \u041f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043d\u043e\u0432\u044b\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 # \u0443\u0436\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 django, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0447\u0435\u0433\u043e-\u0442\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e # \u043d\u043e\u0432\u043e\u0433\u043e \u043c\u044b \u043d\u0435 \u0443\u0432\u0438\u0434\u0438\u043c  # \u0422\u0430\u043a\u0436\u0435 \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438, \u0432\u043c\u0435\u0441\u0442\u043e # QuerySet \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u0440\u0430\u0437\u0443 \u0441\u043f\u0438\u0441\u043e\u043a, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f # \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435 fact_address = company.fact_addresses[0] legal_address = company.legal_addresses[0]  # \u0412\u044b\u0432\u0435\u0434\u0435\u043c \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0434\u043b\u044f \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438 \u044e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e # \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e print(AddressType(fact_address.type).label, fact_address) print(AddressType(legal_address.type).label, legal_address)  # \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 Address object (1) # \u042e\u0440\u0438\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0439 Address object (2) # \u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/code><\/pre>\n<p><a class=\"anchor\" name=\"%D0%BF%D0%BE%D0%B4%D0%B2%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5-%D0%BA%D0%B0%D0%BC%D0%BD%D0%B8-%D1%81-%D0%B4%D1%83%D0%B1%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B5%D0%B9\" id=\"\u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0435-\u043a\u0430\u043c\u043d\u0438-\u0441-\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c-\u0437\u0430\u043f\u0438\u0441\u0435\u0439\"><\/a><\/p>\n<h3>\u041f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0435 \u043a\u0430\u043c\u043d\u0438 \u0441 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0435\u0439<\/h3>\n<p>\u0422\u0443\u0442 \u0432\u0430\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>values<\/code> \u0438 <code>values_list<\/code> \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0448\u0435 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0435\u043d\u043e \u0438 \u043c\u043e\u0436\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043d\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u043c\u0443 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044e. \u041a\u0430\u043a \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439, \u0432\u0430\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0440\u0435\u0448\u0438\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u043e \u044f \u043e\u0431\u044f\u0437\u0430\u043d \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 <code>values<\/code> \u0438 <code>values_list<\/code>, \u043c\u044b \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 django, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u044d\u0442\u0438\u043c django \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0437\u0430\u0431\u043e\u0442\u0438\u0442\u0441\u044f \u043e \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f M2M \u0438 O2M \u0441\u0432\u044f\u0437\u0435\u0439 \u0438 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0441 \u043e\u0434\u043d\u0438\u043c \u0438 \u0442\u0435\u043c \u0436\u0435 ID.<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0438 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 django. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0435, \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438, \u0435\u0441\u043b\u0438 \u044d\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u043f\u043e\u043b\u044f\u043c \u0441\u043e \u0441\u0432\u044f\u0437\u044f\u043c\u0438 O2M \u0438\u043b\u0438 M2M. \u042d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c\u0438 <code>JOIN<\/code> \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c id \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c id \u0430\u0434\u0440\u0435\u0441\u043e\u0432.<\/p>\n<pre><code class=\"python\">with CheckQueries():     pprint(list(Company.objects.filter(pk=1).values(\"id\", \"addresses__id\")))  # [{'addresses__id': 1, 'id': 1}, #  {'addresses__id': 2, 'id': 1}, #  {'addresses__id': 3, 'id': 1}] # \u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 3 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u043b\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b Company. # \u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043a\u0430\u0436\u0434\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 Address \u0431\u044b\u043b\u0430 # \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0430 \u043a \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u044b Company. \u0422\u0430\u043a \u043a\u0430\u043a \u0443 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 # \u0431\u044b\u043b\u043e 3 \u0430\u0434\u0440\u0435\u0441\u0430, \u043c\u044b \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 3 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c SQL \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c LEFT OUTER JOIN<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SELECT \"middle_company\".\"id\" AS \"id\",        \"middle_company_addresses\".\"address_id\" AS \"addresses__id\" FROM \"middle_company\" LEFT OUTER JOIN \"middle_company_addresses\" ON (\"middle_company\".\"id\" = \"middle_company_addresses\".\"company_id\") WHERE \"middle_company\".\"id\" = 1 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000 s<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0427\u0430\u0441\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u043d\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u043c, \u043d\u043e \u0432\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0441\u0443\u0433\u0443\u0431\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e.<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0435\u0449\u0435 \u0438 \u0447\u0430\u0441\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0430.<\/p>\n<pre><code class=\"python\">with CheckQueries():     pprint(list(         Company.objects         .filter(pk=1)         .order_by(\"addresses__id\", \"addresses__parts__position\")         .values(             \"id\",             \"addresses__id\",             \"addresses__parts__key\",             \"addresses__parts__value\",         )     ))<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">[{'addresses__id': 1,   'addresses__parts__key': '\u0443\u043b.',   'addresses__parts__value': 'urAVQxDYxsVxLSkDkUQl',   'id': 1},  {'addresses__id': 1,   'addresses__parts__key': '\u0434.',   'addresses__parts__value': 'ccPkAGylpvSxIZNbOIbW',   'id': 1},  {'addresses__id': 1,   'addresses__parts__key': '\u043a.',   'addresses__parts__value': 'emyuXPNEdmGhcnSyMdRc',   'id': 1},  {'addresses__id': 1,   'addresses__parts__key': '\u043a\u0432',   'addresses__parts__value': 'oMKiAakyCoJJuYEdUkMd',   'id': 1},  {'addresses__id': 2,   'addresses__parts__key': '\u0443\u043b',   'addresses__parts__value': 'vbSonsrMbVUfSxPHFGLr',   'id': 1},  {'addresses__id': 2,   'addresses__parts__key': '\u0434',   'addresses__parts__value': 'wQrlJipLDRvfpQxKfgbq',   'id': 1},  {'addresses__id': 2,   'addresses__parts__key': '\u043a',   'addresses__parts__value': 'VVsKLDTZMgkHrTUOTVKE',   'id': 1},  {'addresses__id': 2,   'addresses__parts__key': '\u043a\u0432',   'addresses__parts__value': 'vRmlBsmedRiaEqEEwhvT',   'id': 1},  {'addresses__id': 3,   'addresses__parts__key': '\u0443\u043b',   'addresses__parts__value': 'rEuDkVxAGPXOSTkcrRkr',   'id': 1},  {'addresses__id': 3,   'addresses__parts__key': '\u0434',   'addresses__parts__value': 'CfiFguBdijkaBYAoYDmi',   'id': 1},  {'addresses__id': 3,   'addresses__parts__key': '\u043a',   'addresses__parts__value': 'oqrBjrfPUerODqZyHjLp',   'id': 1},  {'addresses__id': 3,   'addresses__parts__key': '\u043a\u0432',   'addresses__parts__value': 'gPBDAEGAFJGGdOKeeToS',   'id': 1}]<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0446\u0435\u043b\u044b\u0445 12 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043b\u0438 \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443. \u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b <code>AddressPart<\/code> \u0431\u044b\u043b\u0430 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0430 \u043a \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b <code>Address<\/code>. \u0418 \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u0430\u0434\u0440\u0435\u0441\u0430 \u0431\u044b\u043b\u043e 4 \u0447\u0430\u0441\u0442\u0438, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u0438 \u0443\u043c\u043d\u043e\u0436\u0438\u043b\u043e\u0441\u044c \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u0410 \u0432\u043e\u0442 SQL, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0432\u0435\u043b \u043a \u0442\u0430\u043a\u043e\u043c\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SELECT \"middle_company\".\"id\" AS \"id\",        \"middle_company_addresses\".\"address_id\" AS \"addresses__id\",        \"middle_addresspart\".\"key\" AS \"addresses__parts__key\",        \"middle_addresspart\".\"value\" AS \"addresses__parts__value\" FROM \"middle_company\" LEFT OUTER JOIN \"middle_company_addresses\" ON (\"middle_company\".\"id\" = \"middle_company_addresses\".\"company_id\") LEFT OUTER JOIN \"middle_address\" ON (\"middle_company_addresses\".\"address_id\" = \"middle_address\".\"id\") LEFT OUTER JOIN \"middle_address_parts\" ON (\"middle_address\".\"id\" = \"middle_address_parts\".\"address_id\") LEFT OUTER JOIN \"middle_addresspart\" ON (\"middle_address_parts\".\"addresspart_id\" = \"middle_addresspart\".\"id\") WHERE \"middle_company\".\"id\" = 1 ORDER BY 2 ASC,          \"middle_addresspart\".\"position\" ASC \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.001 s<\/code><\/pre>\n<\/div>\n<\/details>\n<p><a class=\"anchor\" name=\"%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0-%D0%BD%D0%B0-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B9-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B\" id=\"\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438-\u0437\u0430\u043f\u0440\u043e\u0441\u0430-\u043d\u0430-\u043e\u0441\u043d\u043e\u0432\u0435-\u0434\u0430\u043d\u043d\u044b\u0445-\u0434\u0440\u0443\u0433\u043e\u0439-\u0442\u0430\u0431\u043b\u0438\u0446\u044b\"><\/a><\/p>\n<h3>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0440\u0443\u0433\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/h3>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u0443\u044e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p>\u0417\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e \u0441\u043f\u0438\u0441\u043a\u0430 ID \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043d\u0438\u043c\u0438. \u042d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c<\/p>\n<pre><code class=\"python\">def get_companies_by_addresses_ids(ids: QuerySet | list[int]) -&gt; QuerySet:     # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 QuerySet \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u043c     # \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0435 id \u0430\u0434\u0440\u0435\u0441\u043e\u0432     return (         Company.objects         .filter(addresses__id__in=ids)         # \u0418\u0437-\u0437\u0430 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445         # \u043f\u0440\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e m2m \u0441\u0432\u044f\u0437\u0438, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0443\u0431\u043b\u0438.         # \u0418\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0434\u0443\u0431\u043b\u0438 \u043f\u043e \u043f\u043e\u043b\u044e ID (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0432\u043e \u0432\u0441\u0435\u0445 \u0431\u0430\u0437\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445)         .distinct(\"id\")     )   # \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u0434\u0440\u0435\u0441\u043e\u0432 with CheckQueries():     get_companies_by_addresses_ids([1, 2, 3]).count()<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 SQL<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SELECT COUNT(*) FROM   (SELECT DISTINCT ON (\"middle_company\".\"id\") \"middle_company\".\"id\" AS \"col1\",                       \"middle_company\".\"name\" AS \"col2\"    FROM \"middle_company\"    INNER JOIN \"middle_company_addresses\" ON (\"middle_company\".\"id\" = \"middle_company_addresses\".\"company_id\")    WHERE \"middle_company_addresses\".\"address_id\" IN (1, 2, 3)) subquery     \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.001 s<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c, \u043f\u043e\u043a\u0430 \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 ID.<\/p>\n<pre><code class=\"python\">addresses_ids = list(range(1, 30001))  with CheckQueries():     get_companies_by_addresses_ids(addresses_ids).count()<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u043e\u0447\u0442\u0438 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 SQL, \u0432\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f ID. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0445 \u0432\u0441\u0435\u0433\u043e 30 \u0442\u044b\u0441\u044f\u0447, \u043d\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0443\u0436\u0435 \u043e\u0449\u0443\u0442\u0438\u043c\u0430\u044f.<\/p>\n<pre><code class=\"sql\">SELECT COUNT(*) FROM (... WHERE \"middle_company_addresses\".\"address_id\" IN (1, ..., 30000)) subquery  \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.046 s<\/code><\/pre>\n<p>\u0410 \u0441\u0435\u0439\u0447\u0430\u0441 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0432\u043c\u0435\u0441\u0442\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 ID \u0434\u0440\u0443\u0433\u043e\u0439 <code>QuerySet<\/code>, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432\u0441\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u0437\u0434\u0435\u0440\u0436\u043a\u0438 \u043d\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0438 \u0447\u0442\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<pre><code class=\"python\">addresses_ids = Address.objects.values_list(\"id\", flat=True)  with CheckQueries():     get_companies_by_addresses_ids(addresses_ids).count()<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0440\u0443\u0433\u043e\u0439 SQL<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SELECT COUNT(*) FROM   (SELECT DISTINCT ON (\"middle_company\".\"id\") \"middle_company\".\"id\" AS \"col1\",                       \"middle_company\".\"name\" AS \"col2\"    FROM \"middle_company\"    INNER JOIN \"middle_company_addresses\" ON (\"middle_company\".\"id\" = \"middle_company_addresses\".\"company_id\")    WHERE \"middle_company_addresses\".\"address_id\" IN        (SELECT U0.\"id\" AS \"id\"         FROM \"middle_address\" U0)) subquery \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.006 s<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0422\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0435 \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u043e\u043b\u044c\u0448\u0435, \u043e\u0434\u043d\u0430\u043a\u043e, \u043f\u0440\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445 ID \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c  \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u0432 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043f\u043e\u043c\u044f\u043d\u0443 \u043a\u0435\u0439\u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 <code>QuerySet<\/code>. \u0423 \u0432\u0430\u0441 \u043f\u043e\u0447\u0442\u0438 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043b\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0442 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u043d\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u041e\u0431\u044b\u0447\u043d\u043e \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434<br \/><code>annotate<\/code>, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u0432 \u043d\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0438 \u0443\u0436\u0435 \u0438\u0445 \u0431\u0443\u0434\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0432\u044b\u0437\u043e\u0432\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 <code>filter<\/code>.<\/p>\n<p>\u0422\u0430\u043a \u0432\u043e\u0442, \u0435\u0441\u043b\u0438 \u0432\u0430\u0441 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 (\u043e\u043d \u043d\u0443\u0436\u0435\u043d \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438) \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>alias<\/code> \u0432\u043c\u0435\u0441\u0442\u043e \u043c\u0435\u0442\u043e\u0434\u0430 <code>annotate<\/code>. \u0412\u043e\u0442 <a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/models\/querysets\/#alias\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435.<\/p>\n<p><a class=\"anchor\" name=\"%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F-%D0%B8-%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B5%D0%B9\" id=\"\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438-\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f-\u0438-\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f-\u0437\u0430\u043f\u0438\u0441\u0435\u0439\"><\/a><\/p>\n<h3>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439<\/h3>\n<p>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 <code>SELECT<\/code> \u044d\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u0430\u0436\u043d\u043e, \u043d\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c \u0438 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0442\u043e\u0438\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043d.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u044b <code>get_or_create<\/code> \u0438 <code>update_or_create<\/code>. \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430, \u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043e\u043d\u0438 \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u043c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u0445\u043e\u0442\u044f \u043e\u043d \u0438  \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c.<\/p>\n<p><strong>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435<\/strong> <a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/models\/querysets\/#get-or-create\" rel=\"noopener noreferrer nofollow\"><code><strong>get_or_create<\/strong><\/code><\/a> (\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438)<\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0443\u0436\u0435 \u0432 \u043d\u0435\u0439 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0435\u0435.<\/p>\n<pre><code class=\"python\"># \u0425\u043e\u0440\u043e\u0448\u0438\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 (\u0437\u0430\u043f\u0438\u0441\u044c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442) with CheckQueries():     Country.objects.get_or_create(id=1)<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0422\u0443\u0442 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437 \u0431\u0430\u0437\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SQL \u0437\u0430\u043f\u0440\u043e\u0441 1 SELECT \"middle_country\".\"id\",        \"middle_country\".\"name\" FROM \"middle_country\" WHERE \"middle_country\".\"id\" = 1 LIMIT 21 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.002 s<\/code><\/pre>\n<\/div>\n<\/details>\n<pre><code class=\"python\"># \u041f\u043b\u043e\u0445\u043e\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 (\u0437\u0430\u043f\u0438\u0441\u044c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442) with CheckQueries():     Country.objects.get_or_create(id=300)<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0422\u0443\u0442 \u0432\u0441\u0435 \u0441\u043b\u043e\u0436\u043d\u0435\u0435<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SQL \u0437\u0430\u043f\u0440\u043e\u0441 1 SELECT \"middle_country\".\"id\",        \"middle_country\".\"name\" FROM \"middle_country\" WHERE \"middle_country\".\"id\" = 300 LIMIT 21 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 2 BEGIN \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 3 INSERT INTO \"middle_country\" (\"id\", \"name\") VALUES (300, '') RETURNING \"middle_country\".\"id\" \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.006 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 4 COMMIT \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.003 s<\/code><\/pre>\n<\/div>\n<\/details>\n<ol>\n<li>\n<p>\u041f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u044c (\u043d\u043e \u043e\u043d\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442)<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0431\u043b\u043e\u043a \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438<\/p>\n<\/li>\n<li>\n<p>\u041e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0430 \u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438<\/p>\n<\/li>\n<li>\n<p>\u0424\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e<\/p>\n<\/li>\n<\/ol>\n<p>\u0418\u0442\u043e\u0433\u043e, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043b\u0438\u0448\u043d\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u0432\u0438\u0434\u0435 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430. \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b.<\/p>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0435\u0441\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u0443\u044e, \u0438, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c, \u0432 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0434\u0443\u0431\u043b\u0438.<\/p>\n<p>\u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>get_or_create<\/code> \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432 \u0434\u043e\u043b\u0433\u043e\u0441\u0440\u043e\u0447\u043d\u043e\u0439 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0435 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u044f \u0441\u0430\u043c\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0447\u0442\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0438 \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442 \u043f\u043e\u0438\u0441\u043a.<\/p>\n<p><strong>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435<\/strong> <a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/models\/querysets\/#update-or-create\" rel=\"noopener noreferrer nofollow\"><code><strong>update_or_create<\/strong><\/code><\/a> (\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438)<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043c\u0435\u0442\u043e\u0434 <code>update_or_create<\/code><\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0443\u0436\u0435 \u0432 \u043d\u0435\u0439 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0435\u0435.<\/p>\n<pre><code class=\"python\"># \u0417\u0430\u043f\u0438\u0441\u044c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 with CheckQueries():     # \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 defaults \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043b\u0438     # \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438,     # \u0435\u0441\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043d\u0438 \u043d\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438     Address.objects.update_or_create(id=1, defaults={\"city_id\": 1})<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SQL \u0437\u0430\u043f\u0440\u043e\u0441 1 BEGIN \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 2 SELECT \"middle_address\".\"id\",        \"middle_address\".\"type\",        \"middle_address\".\"city_id\" FROM \"middle_address\" WHERE \"middle_address\".\"id\" = 1 LIMIT 21 FOR UPDATE \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.002 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 3 UPDATE \"middle_address\" SET \"city_id\" = 1 WHERE \"middle_address\".\"id\" = 1 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 4 COMMIT \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.002 s<\/code><\/pre>\n<\/div>\n<\/details>\n<ol>\n<li>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f <code>city_id<\/code><\/p>\n<\/li>\n<li>\n<p>\u0424\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e<\/p>\n<\/li>\n<\/ol>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<pre><code class=\"python\"># \u0417\u0430\u043f\u0438\u0441\u044c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 with CheckQueries():     Address.objects.update_or_create(         id=30001,         defaults={\"city_id\": 1, \"type\": AddressType.FACT}     )<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437, \u0432\u0441\u0435 \u043e\u043f\u044f\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u0435\u0435<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">SQL \u0437\u0430\u043f\u0440\u043e\u0441 1 BEGIN \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 2 SELECT \"middle_address\".\"id\",        \"middle_address\".\"type\",        \"middle_address\".\"city_id\" FROM \"middle_address\" WHERE \"middle_address\".\"id\" = 30001 LIMIT 21 FOR UPDATE \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.006 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 3 SAVEPOINT \"s136764922921216_x3\" \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 4 INSERT INTO \"middle_address\" (\"id\", \"type\", \"city_id\") VALUES (30001, 0, 1) RETURNING \"middle_address\".\"id\" \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 5 RELEASE SAVEPOINT \"s136764922921216_x3\" \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 6 COMMIT \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.002 s<\/code><\/pre>\n<\/div>\n<\/details>\n<ol>\n<li>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f (\u0437\u0430\u043f\u0438\u0441\u044c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442)<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u041e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u043c \u0432\u0441\u0442\u0430\u0432\u043a\u0443<\/p>\n<\/li>\n<li>\n<p>\u041e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u043c \u0442\u043e\u0447\u043a\u0443 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u0424\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u043e\u0433\u043e, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0432\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0438, \u0441\u044e\u0434\u0430 \u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0441\u044f <code>ROLLBACK TO SAVEPOINT<\/code>, \u0437\u0430\u0442\u0435\u043c django \u043f\u043e \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u0441\u0432\u043e\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u0443\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 2 \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442 \u0432\u0441\u0435 <code>ROLLBACK<\/code><\/p>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u0432\u0441\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u043e. \u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 <code>get_or_create<\/code>, \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0434\u043d\u0430\u043a\u043e \u0435\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0434 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c, \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0443\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0435\u043c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b, \u0430 \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445 \u0432\u0441\u0442\u0430\u0432\u043a\u0430 \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043c\u044b \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u0435\u0439 (\u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u044b), \u0430 \u0442\u0430\u043a\u0436\u0435 \u0435\u0441\u043b\u0438 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<p><strong>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435<\/strong> <a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/models\/querysets\/#update\" rel=\"noopener noreferrer nofollow\"><code><strong>update<\/strong><\/code><\/a> (\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439)<\/p>\n<p>\u041a\u0443\u0434\u0430 \u0431\u043e\u043b\u0435\u0435 \u043e\u0449\u0443\u0442\u0438\u043c\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 <code>update<\/code><\/p>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u0437\u0430\u043f\u0438\u0441\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u043f\u043e\u0434 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<pre><code class=\"python\">with CheckQueries():     # \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0438\u043c\u0432\u043e\u043b \".\" \u043a \u043a\u043b\u044e\u0447\u0430\u043c \u043f\u0435\u0440\u0432\u044b\u0445 \u0442\u0440\u0435\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 AddressPart     (         AddressPart.objects         .filter(id__in=[1, 2, 3])         .update(key=Concat(F(\"key\"), Value(\".\")))     ) <\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0422\u0443\u0442 \u0432\u0441\u0435 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e, \u0443\u0434\u043e\u0431\u043d\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e &#8212; \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">UPDATE \"middle_addresspart\" SET \"key\" = (COALESCE(\"middle_addresspart\".\"key\", '') || COALESCE('.', '')) WHERE \"middle_addresspart\".\"id\" IN (1, 2, 3) \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.008 s<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u0442\u044c \u0440\u044f\u0434 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c.<\/p>\n<ol>\n<li>\n<p>\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b (\u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u044d\u0442\u0438\u043c \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430)<\/p>\n<\/li>\n<li>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f\u043c\u0438 \u0438 \u0440\u044f\u0434\u043e\u043c \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 SQL, \u043c\u0435\u0442\u043e\u0434 <code>save<\/code> \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d, \u0430 \u0442\u0430\u043a\u0436\u0435  \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u044b \u0441\u0438\u0433\u043d\u0430\u043b\u044b <code>pre_save<\/code> \u0438 <code>post_save<\/code>.<\/p>\n<\/li>\n<\/ol>\n<p>\u0425\u043e\u0447\u0443 \u0437\u0430\u043e\u0441\u0442\u0440\u0438\u0442\u044c \u043e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u0443\u043d\u043a\u0442\u0435 3. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043b\u043e\u0433\u0438\u043a\u0430 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <code>save<\/code> \u0438\u043b\u0438 \u0432 \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u0445 <code>pre_save<\/code> \u0438\u043b\u0438 <code>post_save<\/code>, \u0442\u043e, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0432\u0430\u043c \u043d\u0435 \u0441\u0442\u043e\u0438\u0442.<\/p>\n<p><strong>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 bulk<\/strong> <strong>\u043c\u0435\u0442\u043e\u0434\u043e\u0432<\/strong><\/p>\n<p>\u0412 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0433\u043b\u0430\u0432\u044b, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c <code>bulk<\/code> \u043c\u0435\u0442\u043e\u0434\u044b, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e <code>bulk_create<\/code> \u0438 <code>bulk_update<\/code>.<\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 2 \u043c\u0435\u0442\u043e\u0434\u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u043e\u0431\u0445\u043e\u0434 \u043c\u0435\u0442\u043e\u0434\u0430 <code>save<\/code> \u043c\u043e\u0434\u0435\u043b\u0438 django, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0438 \u043a\u043e\u0434 \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u0430 <code>save<\/code> \u043d\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u044b <code>pre_save<\/code> \u0438 <code>post_save<\/code> \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u044b.<\/p>\n<p><strong>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435<\/strong> <a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/models\/querysets\/#bulk-create\" rel=\"noopener noreferrer nofollow\"><code><strong>bulk_create<\/strong><\/code><\/a> (\u0432\u0441\u0442\u0430\u0432\u043a\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0435\u0439)<\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 <code>bulk_create<\/code> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u0432\u0441\u0442\u0430\u0432\u043a\u0443 \u0441\u043f\u0438\u0441\u043a\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. <\/p>\n<pre><code class=\"python\">with CheckQueries():     countries = [         Country(name=\"\u041d\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0430 1\"),         Country(name=\"\u041d\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0430 2\"),     ]     countries = Country.objects.bulk_create(countries)<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">SQL \u0437\u0430\u043f\u0440\u043e\u0441 1 BEGIN \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 2 INSERT INTO \"middle_country\" (\"name\") SELECT * FROM UNNEST((ARRAY['\u041d\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0430 1', '\u041d\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0430 2'])::varchar(128)[]) RETURNING \"middle_country\".\"id\" \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.007 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 3 COMMIT \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.001 s<\/code><\/pre>\n<\/div>\n<\/details>\n<p><strong>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435<\/strong> <a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/models\/querysets\/#bulk-update\" rel=\"noopener noreferrer nofollow\"><code><strong>bulk_update<\/strong><\/code><\/a> (\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0435\u0439)<\/p>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 <code>countries<\/code> \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u0441 \u0434\u0432\u0443\u043c\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430\u043c\u0438 django \u043c\u043e\u0434\u0435\u043b\u0438 <code>Country<\/code>, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c ID.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u0437\u0430\u043f\u0438\u0441\u044f\u0445 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>bulk_update<\/code>. \u0414\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430, \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u043f\u043e\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c.<\/p>\n<pre><code class=\"python\">with CheckQueries():     for country in countries:         # \u041f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0443\u0444\u0444\u0438\u043a\u0441 \u043a \u0438\u043c\u0435\u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u044b         country.name += \": \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\"          country.save()     countries = Country.objects.bulk_update(countries, fields=[\"name\"])<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 SQL<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SQL \u0437\u0430\u043f\u0440\u043e\u0441 1 BEGIN \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 2 UPDATE \"middle_country\" SET \"name\" = (CASE                   WHEN (\"middle_country\".\"id\" = 21) THEN '\u041d\u043e\u0432\u044b\u0439 \u0433\u043e\u0440\u043e\u0434 1: \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d'                   WHEN (\"middle_country\".\"id\" = 22) THEN '\u041d\u043e\u0432\u044b\u0439 \u0433\u043e\u0440\u043e\u0434 2: \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d'                   ELSE NULL               END)::varchar(128) WHERE \"middle_country\".\"id\" IN (21, 22) \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.002 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 3 COMMIT \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.007 s<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c, \u0442\u0443\u0442 \u0442\u0430\u043a\u0436\u0435 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043a\u0440\u0438\u043c\u0438\u043d\u0430\u043b\u0430. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 ID, \u043c\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<p><strong>\u041d\u041e<\/strong>, \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441. \u041f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u043b\u0435\u0439, \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0432\u0441\u0435 \u043f\u043e\u043b\u044f, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043b\u0438 \u043e\u043d\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f.<\/p>\n<pre><code class=\"python\">addresses = list(Address.objects.filter(id__in=[1, 2]))  with CheckQueries():     for address in addresses:         address.type = 1         address.city_id = 2         break      addresses = Address.objects.bulk_update(         addresses, fields=[\"type\", \"city_id\"]     )<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0418 \u0432\u043e\u0442 \u043a\u0430\u043a \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f SQL<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">SQL \u0437\u0430\u043f\u0440\u043e\u0441 1 BEGIN \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 2 UPDATE \"middle_address\" SET \"type\" = (CASE                   WHEN (\"middle_address\".\"id\" = 1) THEN 1                   WHEN (\"middle_address\".\"id\" = 2) THEN 1                   ELSE NULL               END)::smallint,     \"city_id\" = (CASE                      WHEN (\"middle_address\".\"id\" = 1) THEN 2                      WHEN (\"middle_address\".\"id\" = 2) THEN 2                      ELSE NULL                  END)::bigint WHERE \"middle_address\".\"id\" IN (1,                                 2) \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.001 s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 3 COMMIT \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.004 s<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0413\u043b\u044f\u0434\u044f \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 2, \u043d\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0432\u043e\u0434, \u0447\u0442\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438\u043c\u0435\u0435\u0442 \u0442\u0435\u043d\u0434\u0435\u043d\u0446\u0438\u044e \u0440\u0430\u0437\u0440\u0430\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043f\u0440\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u0435\u0439, \u0442\u0430\u043a \u0438 \u043f\u0440\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439.<\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440\u043e\u0432\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>batch_size<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043e\u0431\u043e\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u0430\u0445. \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e, \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0440\u0430\u0439\u043e\u043d\u0435 2 000 &#8212; 10 000 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0437\u0430 \u0440\u0430\u0437 (\u043d\u0438\u043a\u0442\u043e \u0432\u0430\u043c \u043d\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0435).<\/p>\n<p><a class=\"anchor\" name=\"%D0%B8%D1%82%D0%BE%D0%B3%D0%B8-%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B-2\" id=\"\u0438\u0442\u043e\u0433\u0438-\u0433\u043b\u0430\u0432\u044b-2\"><\/a><\/p>\n<h3>\u0418\u0442\u043e\u0433\u0438 \u0433\u043b\u0430\u0432\u044b<\/h3>\n<p>\u0417\u0430\u0444\u0438\u043d\u0430\u043b\u0438\u043c \u0434\u0430\u043d\u043d\u0443\u044e \u0433\u043b\u0430\u0432\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0432\u044b\u0432\u043e\u0434\u0430\u043c\u0438:<\/p>\n<ol>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0438\u0437 M2M \u0438\u043b\u0438 O2M \u0441\u0432\u044f\u0437\u0435\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <code>prefetch_related<\/code><\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435, \u0447\u0442\u043e, \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 <code>prefetch_related<\/code>, \u0432\u0430\u043c \u0432\u0441\u0435 \u0435\u0449\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f <code>select_related<\/code> \u043a\u0430\u043a \u0434\u043b\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0445 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <code>prefetch_related<\/code>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 <code>Prefetch<\/code><\/p>\n<\/li>\n<li>\n<p>\u0411\u0443\u0434\u044c\u0442\u0435 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u044b \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 <code>values<\/code> \u0438 <code>values_list<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 M2M \u0438\u043b\u0438 O2M \u0441\u0432\u044f\u0437\u0435\u0439. <\/p>\n<\/li>\n<li>\n<p>\u0412\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0440\u0430\u0437\u043d\u044b\u0439 SQL, \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u0442\u0435 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0439 <code>QuerySet<\/code> <\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u043e\u0432\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438, \u0438\u043d\u043e\u0433\u0434\u0430 \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>get_or_create<\/code> \u0438 <code>update_or_create<\/code><\/p>\n<\/li>\n<li>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0440\u0430\u0437\u043e\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>update<\/code>, \u043d\u043e \u043c\u0435\u0442\u043e\u0434 <code>save<\/code> \u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u044b<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0440\u0430\u0437\u043e\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>bulk_create<\/code>, \u043d\u043e \u043c\u0435\u0442\u043e\u0434 <code>save<\/code> \u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u044b<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0440\u0430\u0437\u043e\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>bulk_update<\/code>, \u043d\u043e \u043c\u0435\u0442\u043e\u0434 <code>save<\/code> \u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u044b<\/p>\n<\/li>\n<\/ol>\n<p><a class=\"anchor\" name=\"%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D0%B0%D1%8F-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\" id=\"\u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u0430\u044f-\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\"><\/a><\/p>\n<h2>\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f<\/h2>\n<p>\u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0449\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b. \u0422\u0430\u043a \u043a\u0430\u043a \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e PostgreSQL, \u043f\u0440\u0438\u043c\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0441 \u043e\u0433\u043b\u044f\u0434\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u043d\u0435\u0435. <\/p>\n<p>\u0414\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0433\u043b\u0430\u0432\u044b \u0431\u044b\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 <code>advanced<\/code>.<\/p>\n<p>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f \u0442\u0430\u043a\u0436\u0435 \u0441\u043a\u0440\u043e\u044e \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437, \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043d\u0435\u043c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u044f\u0434 \u0432\u0430\u0436\u043d\u044b\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432. <\/p>\n<p><a class=\"anchor\" name=\"%D1%82%D0%B8%D0%BF%D1%8B-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85\" id=\"\u0442\u0438\u043f\u044b-\u0434\u0430\u043d\u043d\u044b\u0445\"><\/a><\/p>\n<h3>\u0422\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445. \u0422\u0430\u043a \u043a\u0430\u043a \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0434\u0435\u043b\u044f\u044e\u0442 \u0440\u0430\u0437\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e\u0442 \u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0430\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c. <\/p>\n<p><em>\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u043f\u043e\u043b\u0435\u0439 django \u0438 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0432\u0430\u0448\u0435\u0439 \u0431\u0430\u0437\u0435 \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u043f\u0443\u0442\u0438 <\/em><code><em>django\/db\/backends\/&lt;your_backend&gt;\/base.py<\/em><\/code><\/p>\n<pre><code class=\"python\"># \u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 class ModelWithBaseTypes(models.Model):     # \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0442 -32768 \u0434\u043e 32767     # \u0414\u0430\u043d\u043d\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f Enum c \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u043c\u0438      # \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0438\u043b\u0438 \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u0435\u043d \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0434\u0438\u0430\u043f\u043e\u0437\u043e\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439      small_integer = models.SmallIntegerField() # smallint (2 bytes)          # \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0442 -2147483648 \u0434\u043e 2147483647     # \u0414\u0430\u043d\u043d\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432     integer = models.IntegerField() # integer (4 bytes)          # \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0442 -9223372036854775808 \u0434\u043e 9223372036854775807     # \u0414\u0430\u043d\u043d\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446,     # \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0438 \u0432 \u0440\u044f\u0434\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445     # \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u0432 YouTube     big_integer = models.BigIntegerField() # bigint (8 bytes)      # \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 3 \u043f\u043e\u043b\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b, \u043d\u043e \u0445\u0440\u0430\u043d\u044f\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0442 0          # smallint (2 bytes)     positive_small_integer = models.PositiveSmallIntegerField()     # integer (4 bytes)     positive_integer = models.PositiveIntegerField()     # bigint (8 bytes)     positive_big_integer = models.PositiveSmallIntegerField()      # \u0422\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u043e\u0439.      # \u0414\u0430\u043d\u043d\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f Enum \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438     # \u0410 \u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u0435\u0439, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u043b\u0438\u043d\u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u043c\u043e\u0436\u0435\u043c     # \u0441\u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c     # varchar(max_length) (1-4 bytes \u043d\u0430 \u0441\u0438\u043c\u0432\u043e\u043b + 1-4 bytes \u043d\u0430 \u0434\u043b\u0438\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0438)     small_text = models.CharField(max_length=255)       # \u0422\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 \u0431\u0435\u0437 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0434\u043b\u0438\u043d\u0435     # \u0422\u0443\u0442 \u0431\u0443\u0434\u044c\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u0438\u043c\u0435\u044e\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435     # text (1-4 bytes \u043d\u0430 \u0441\u0438\u043c\u0432\u043e\u043b + 1-4 bytes \u043d\u0430 \u0434\u043b\u0438\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0438)     big_text = models.TextField()      # \u041a\u043e\u0433\u0434\u0430 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0435 \u0441 \u0431\u0443\u043b\u0435\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u0434\u0443\u043c\u0430\u044e \u0432\u0441\u0435\u0433\u0434\u0430 \u044f\u0441\u043d\u043e.     # \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0432\u0438\u0436\u0443 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u0438\u043b\u0438 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 Enum     # \u0432\u0441\u0435\u0433\u043e \u0441 2 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u043e \u0444\u043b\u0430\u0433     # \u0422\u0430\u043a\u0436\u0435, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u043b\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 null, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c     # \u0438\u043c\u0435\u0442\u044c \u0441\u0440\u0430\u0437\u0443 3 \u043e\u043f\u0446\u0438\u0438 \u0438 \u0447\u0430\u0441\u0442\u044c Enum \u0441 \u0442\u0440\u0435\u043c\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0433\u0443\u0442     # \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u044b \u0432 nullable BooleanField     bool_field = models.BooleanField() # bool (1 byte)      # \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u0430\u0442\u0430 \u0438\u043b\u0438 \u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043c\u044f, \u0432\u0430\u043c \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435     # \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044f     date_field = models.DateField() # date (4 bytes)          # \u0412\u044b\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043a\u0430\u043a \u0441 \u0442\u0430\u0439\u043c\u0437\u043e\u043d\u043e\u0439, \u0442\u0430\u043a \u0438 \u0431\u0435\u0437 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b     # timestamp with time zone (8 bytes)     datetime_field = models.DateTimeField()           # \u0422\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u0440\u0430\u043d\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u044f.     # \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043d\u0435 \u0442\u0430\u043a \u0447\u0430\u0441\u0442\u043e,     # \u043d\u043e \u0432\u0441\u0435 \u0436\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u0443\u0434\u043e\u0431\u0435\u043d, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0445\u0440\u0430\u043d\u0438\u0442\u0435     # \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0438\u043b\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u0430\u043a\u043e\u0433\u043e \u043b\u0438\u0431\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430.     # \u0422\u0430\u043a\u0436\u0435 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u0439\u043c\u0437\u043e\u043d\u0443,     # \u043d\u043e \u0442\u043e\u0433\u0434\u0430 \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043e 12 \u0431\u0430\u0439\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443     # \u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0442\u0430\u0439\u043c\u0437\u043e\u043d\u0443 \u043a\u0430\u043a-\u0442\u043e \u0438\u043d\u0430\u0447\u0435     time_field = models.TimeField() # time (8 bytes)      # \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u0442 -178000000 \u043b\u0435\u0442 \u0434\u043e 178000000 \u043b\u0435\u0442     # \u0441 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u043e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b     # \u0414\u0430\u043d\u043d\u044b\u0439 \u0442\u0438\u043f \u043f\u043e\u043b\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0434\u043e\u0431\u0435\u043d \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438, \u043d\u043e \u043e\u043d \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442     # \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c     # \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0434\u043d\u0435\u0439, \u0442\u043e \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438, \u0432\u0430\u043c \u0431\u0443\u0434\u0435\u0442     # \u0434\u0435\u0448\u0435\u0432\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u043d\u0438\u0445 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0438\u043b\u0438     # \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b     duration_field = models.DurationField() # interval (16 bytes)      # \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043e 131072 \u0437\u043d\u0430\u043a\u043e\u0432 \u0434\u043e \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0438 \u0434\u043e 16383 \u0437\u043d\u0430\u043a\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439     # \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 Decimal \u0432\u0430\u0436\u043d\u043e, \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c     # \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u044b \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043c\u043e\u0447\u044c     # \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0431\u0430\u0437\u0443. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0439     # \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c     # \u043d\u0430\u0434 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. \u0427\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0442\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442     # \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043e \u043c\u0435\u0441\u0442\u0430 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439     # numeric(max_digits, decimal_places) (variable)     decimal_field = models.DecimalField(max_digits=15, decimal_places=2)      # \u041d\u0435\u0442\u043e\u0447\u043d\u044b\u0439 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0439 \u0442\u0438\u043f, \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e     # \u0434\u043e 15 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u043a\u043e\u0432     # \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u043b\u0438\u0431\u043e \u0440\u0430\u0441\u0447\u0435\u0442\u044b, \u0432\u0430\u043c \u043f\u043e\u0447\u0442\u0438 \u0441\u043e 100%     # \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c DecimalField     float_field = models.FloatField() # double precision (8 bytes) <\/code><\/pre>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c, \u0432\u0430\u043c \u0441 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0434\u043e\u043b\u0435\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0435\u0449\u0435 \u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0438\u043f\u044b \u043f\u043e\u043b\u0435\u0439, \u0432 django. \u0414\u0443\u043c\u0430\u044e, \u0432\u044b \u043f\u043e\u0439\u043c\u0435\u0442\u0435, \u0447\u0442\u043e \u043e\u043d\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u0432\u0430\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f.<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/models\/fields\/#genericipaddressfield\" rel=\"noopener noreferrer nofollow\"><code>models.GenericIPAddressField<\/code><\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/models\/fields\/#jsonfield\" rel=\"noopener noreferrer nofollow\"><code>models.JSONField<\/code><\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/models\/fields\/#uuidfield\" rel=\"noopener noreferrer nofollow\"><code>models.UUIDField<\/code><\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/contrib\/postgres\/fields\/#arrayfield\" rel=\"noopener noreferrer nofollow\"><code>django.contrib.postgres.fields.ArrayField<\/code><\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/contrib\/postgres\/fields\/#integerrangefield\" rel=\"noopener noreferrer nofollow\"><code>django.contrib.postgres.fields.*RangeField<\/code><\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0435\u0440\u0435\u0447\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0441\u0447\u0435\u0442 <code>JSONField<\/code> \u0438 <code>ArrayField<\/code>. \u041d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e JSONField, \u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 \u0432 <code>ArrayField<\/code>. \u041d\u0435 \u0431\u0435\u0440\u0443\u0441\u044c \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u043b\u044c\u0437\u044f \u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0441\u043e\u043c\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438, \u0438 \u0432\u044b \u0442\u043e\u0447\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u043d\u0430\u0442\u044c \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u044b \u0434\u0435\u043b\u0430\u0435\u0442\u0435, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0432\u044b \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0435 \u0438 \u043d\u0435\u043b\u044c\u0437\u044f \u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u043d\u0430\u0447\u0435.<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, PostgreSQL \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043e\u043b\u0435\u0439, \u043d\u043e, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u044b \u0438 \u0442\u0430\u043a \u0437\u043d\u0430\u0435\u0442\u0435, \u0447\u0435\u0433\u043e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435.<\/p>\n<p>\u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/www.postgresql.org\/docs\/17\/datatype.html\" rel=\"noopener noreferrer nofollow\">PostgreSQL<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/models\/fields\/#field-types\" rel=\"noopener noreferrer nofollow\">Django fields<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/contrib\/postgres\/fields\/\" rel=\"noopener noreferrer nofollow\">Django PostgreSQL fields<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"%D0%B2%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B2-%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%8B\" id=\"\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435-\u0432-\u0438\u043d\u0434\u0435\u043a\u0441\u044b\"><\/a><\/p>\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u044b<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0431\u043b\u0438\u0436\u0435 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0437\u0434\u0435\u0441\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0442\u0430\u043a\u043e\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442, \u043a\u0430\u043a\u0438\u0435 \u0431\u044b\u0432\u0430\u044e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043f\u043e\u0438\u0441\u043a\u0430 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b, \u0443\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u0430\u043b\u0435\u043a\u043e \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>\u042f \u043e\u0431\u0437\u043e\u0440\u043d\u043e \u043f\u043e\u043a\u0430\u0436\u0443, \u043a\u0430\u043a\u0438\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 django \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0432 \u043a\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0438\u0445 \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0438 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u0443\u044e \u043f\u043e\u043b\u044c\u0437\u0443 \u0438 \u0432\u0440\u0435\u0434 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u043d\u0435\u0441\u0442\u0438. <\/p>\n<p><strong>\u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0439<\/strong>.<\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043c\u0435\u0441\u0442\u043e \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u043f\u0440\u0438\u0447\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u0435\u0431\u0435 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c\u043e\u0435 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u0435\u0441\u0442\u043e.<\/p>\n<p>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043f\u0440\u0438\u0437\u0432\u0430\u043d\u044b \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u043d\u0443\u0436\u043d\u044b\u0445 \u0432\u0430\u043c \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u043d\u043e \u043e\u043d\u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0432 \u0432\u0430\u0448\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0440\u044b\u0445, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u043c\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u0432 \u0441\u0430\u043c\u0438\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0445.<\/p>\n<p>\u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e, \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 \u0442\u043e\u0439 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0442\u0435\u043c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435 \u043d\u0430 \u043d\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u0435\u0431\u044f \u0438\u043d\u0434\u0435\u043a\u0441. \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0441 \u0431\u0443\u043b\u0435\u0432\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0438\u043b\u0438 Enums, \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043d\u044b\u043c. <\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0432\u0430\u043c \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0432\u0435\u0448\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0431\u0435\u0437\u0434\u0443\u043c\u043d\u043e.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435, \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e django \u0431\u0443\u0434\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u043b\u044f \u043f\u043e\u043b\u0435\u0439, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0445 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u044f \u0438\u043b\u0438 \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u043e\u043b\u0435\u0439.<\/p>\n<p><strong>\u0412\u0438\u0434\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432.<\/strong><\/p>\n<p>\u041d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0430 \u043a\u0430\u043a\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0446\u0435\u043b\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e.<\/p>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e \u043f\u0440\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0438 <code>db_index=True<\/code> \u0438\u043b\u0438 <code>unique=True<\/code> \u0432 \u043f\u043e\u043b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438, django \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d B-Tree \u0438\u043d\u0434\u0435\u043a\u0441 (\u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e). <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 PostgreSQL, \u0443 \u0432\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c<br \/>\u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432:<\/p>\n<p><strong>django.contrib.postgres.indexes.BTreeIndex<\/strong> (B-Tree)<br \/><a href=\"https:\/\/django.fun\/docs\/django\/5.2\/ref\/contrib\/postgres\/indexes\/#btreeindex\" rel=\"noopener noreferrer nofollow\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a> django, <a href=\"https:\/\/www.postgresql.org\/docs\/current\/btree.html\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a> PostgreSQL<\/p>\n<p>\u0411\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u0445 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u0432, \u0432 \u0446\u0435\u043b\u043e\u043c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441, \u0435\u0441\u043b\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u0435\u043c\u044b\u0439  \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 <code>&lt;<\/code>, <code>&lt;=<\/code>, <code>=<\/code>, <code>&gt;=<\/code>, <code>&gt;<\/code>.<\/p>\n<p><strong>django.contrib.postgres.indexes.HashIndex<\/strong> (HASH)<br \/><a href=\"https:\/\/django.fun\/docs\/django\/5.2\/ref\/contrib\/postgres\/indexes\/#hashindex\" rel=\"noopener noreferrer nofollow\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a> django, <a href=\"https:\/\/www.postgresql.org\/docs\/current\/hash-index.html\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a> PostgreSQL<\/p>\n<p>\u0425\u044d\u0448 \u0438\u043d\u0434\u0435\u043a\u0441 \u0445\u0440\u0430\u043d\u0438\u0442 32 \u0431\u0438\u0442\u043d\u044b\u0439 \u0445\u044d\u0448, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0439 \u0442\u0438\u043f \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c <code>=<\/code>, \u043d\u043e \u0442\u0443\u0442 \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435 \u0447\u0435\u043c \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432.<\/p>\n<p><strong>django.contrib.postgres.indexes.BrinIndex<\/strong> (BRIN Block Range Index)<br \/><a href=\"https:\/\/django.fun\/docs\/django\/5.2\/ref\/contrib\/postgres\/indexes\/#brinindex\" rel=\"noopener noreferrer nofollow\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a> django, <a href=\"https:\/\/www.postgresql.org\/docs\/current\/brin.html\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a> PostgreSQL<\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0442\u043e\u0447\u043d\u044b\u043c \u0438 \u0445\u0440\u0430\u043d\u0438\u0442 \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u043d\u044b\u0435 \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0445\u0441\u044f \u0432 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u0430\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u0442\u0430\u043a\u043e\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0431\u0443\u0434\u0435\u0442 \u0434\u043b\u044f \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043b\u0435 \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438). \u0414\u043b\u044f \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438, \u0437\u0430\u043f\u0438\u0441\u044f\u043c \u0432  \u0438\u043d\u0434\u0435\u043a\u0441\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u043e\u043d\u044b \u0431\u043b\u043e\u043a\u043e\u0432. \u0414\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c\u0438  <code>&lt;<\/code>, <code>&lt;=<\/code>, <code>=<\/code>, <code>&gt;=<\/code>, <code>&gt;<\/code>.<\/p>\n<p><strong>django.contrib.postgres.indexes.GinIndex<\/strong> (GIN Generalized Inverted Index)<br \/><a href=\"https:\/\/django.fun\/docs\/django\/5.2\/ref\/contrib\/postgres\/indexes\/#ginindex\" rel=\"noopener noreferrer nofollow\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a> django, <a href=\"https:\/\/www.postgresql.org\/docs\/current\/gin.html\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a> PostgreSQL<\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u043a\u0443\u0434\u0430 \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u043f\u043e \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u0438\u0440\u043e\u0434\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0432\u0430\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/340978\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u044e<\/a>, \u0433\u0434\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043e\u0431 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438. \u0415\u0441\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u043e, \u0442\u043e \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 <a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/contrib\/postgres\/search\/\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u043b\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430<\/a>, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435, <a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/contrib\/postgres\/search\/#searchvector\" rel=\"noopener noreferrer nofollow\"><code>SearchVector<\/code><\/a> \u0438 \u0438\u0449\u0435\u0442\u0435 \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u044f \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0432 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u0438\u043b\u0438 \u0444\u0440\u0430\u0437\u0443. \u0422\u0430\u043a\u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441 <code>ArrayField<\/code> \u0438 <code>JSONField<\/code>.<\/p>\n<p><strong>django.contrib.postgres.indexes.GistIndex<\/strong> (GiST Generalized Search Trees)<br \/><a href=\"https:\/\/django.fun\/docs\/django\/5.2\/ref\/contrib\/postgres\/indexes\/#gistindex\" rel=\"noopener noreferrer nofollow\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a> django, <a href=\"https:\/\/www.postgresql.org\/docs\/current\/gist.html\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a> PostgreSQL<\/p>\n<p>GiST \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u0432, \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u0432, \u0442\u043e\u0447\u0435\u043a, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0438\u0441\u043a \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438 \u043f\u043e\u043b\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u043e\u0438\u0441\u043a. \u041e\u0431\u043e\u0431\u0449\u0430\u044f, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0434\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412\u043e\u0442 <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/333878\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u044f<\/a> \u043d\u0430 \u0442\u0435\u043c\u0443.<\/p>\n<p><strong>django.contrib.postgres.indexes.SpGistIndex<\/strong> (SP-GiST space partitioning generalized search trees)<br \/><a href=\"https:\/\/django.fun\/docs\/django\/5.2\/ref\/contrib\/postgres\/indexes\/#spgistindex\" rel=\"noopener noreferrer nofollow\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a> django, <a href=\"https:\/\/www.postgresql.org\/docs\/current\/spgist.html\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a> PostgreSQL<\/p>\n<p>\u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d, \u0434\u043b\u044f \u043d\u0435\u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0439 \u0438 \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 \u043f\u043e\u0438\u0441\u043a \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0434\u043d\u043e\u0440\u043e\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c\u0443 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044e. \u041d\u0430 \u043c\u043e\u0435\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043d\u0435 \u0431\u044b\u043b\u043e \u043e\u043f\u044b\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u043e\u0441\u0442\u0430\u0432\u043b\u044e <a href=\"https:\/\/habr.com\/ru\/companies\/postgrespro\/articles\/337502\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0441\u044b\u043b\u043a\u0443<\/a> \u043d\u0430 \u0441\u0442\u0430\u0442\u044c\u044e, \u043f\u0440\u043e \u043d\u0435\u0433\u043e.<\/p>\n<p><strong>django.contrib.postgres.indexes.BloomIndex<\/strong> (\u0418\u043d\u0434\u0435\u043a\u0441 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Bloom_filter\" rel=\"noopener noreferrer nofollow\">\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0411\u043b\u0443\u043c\u0430<\/a>)  <a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/contrib\/postgres\/indexes\/#bloomindex\" rel=\"noopener noreferrer nofollow\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a> django, <a href=\"https:\/\/www.postgresql.org\/docs\/current\/bloom.html\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a> PostgreSQL<\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0442\u043e\u0447\u043d\u044b\u043c. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u043e\u0433\u043e, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0447\u043b\u0435\u043d\u043e\u043c \u043d\u0430\u0431\u043e\u0440\u0430. \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u0435\u0437\u0435\u043d, \u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0438\u043c\u0435\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432, \u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0438\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438. B-Tree \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0411\u043b\u0443\u043c\u0430, \u043d\u043e B-Tree \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043d\u0443\u0436\u043d\u043e \u043c\u043d\u043e\u0433\u043e, \u0430 \u0438\u043d\u0434\u0435\u043a\u0441 \u0411\u043b\u0443\u043c\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d. \u0422\u0430\u043a\u0436\u0435 \u0438\u0437 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432, \u0438\u043d\u0434\u0435\u043a\u0441 \u0431\u043b\u0443\u043c\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0430.<\/p>\n<p><a class=\"anchor\" name=\"%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%BE%D0%B2\" id=\"\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435-\u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432\"><\/a><\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u043b\u044f \u043f\u043e\u043b\u0435\u0439 \u043d\u043e\u0432\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446.<\/p>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 Bloom \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c B-Tree \u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u0430. <\/p>\n<pre><code class=\"python\">from django.contrib.postgres.indexes import (     GinIndex, BrinIndex, BloomIndex,     BTreeIndex, GistIndex, HashIndex )  # \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0431\u0443\u0434\u0435\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u044b Bloom \u0438 B-Tree class ModelWithBloomIndex(models.Model):     # \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u0431\u0435\u0437 \u0438\u043d\u0434\u0435\u043a\u0441\u0430     char_field_1 = models.CharField(max_length=32)     char_field_2 = models.CharField(max_length=32)     integer_field_3 = models.IntegerField()     integer_field_4 = models.IntegerField()      # \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 bloom \u0438\u043d\u0434\u0435\u043a\u0441\u0430     char_field_1_bloom = models.CharField(max_length=32)     char_field_2_bloom = models.CharField(max_length=32)     integer_field_3_bloom = models.IntegerField()     integer_field_4_bloom = models.IntegerField()      # \u0421\u0440\u0430\u0432\u043d\u0438\u043c \u0441 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 btree \u043d\u0430 \u0433\u0440\u0443\u043f\u043f\u0435 \u043f\u043e\u043b\u0435\u0439     char_field_1_btree = models.CharField(max_length=32)     char_field_2_btree = models.CharField(max_length=32)     integer_field_3_btree = models.IntegerField()     integer_field_4_btree = models.IntegerField()      class Meta:         indexes = [             # \u0414\u043e\u0431\u0430\u0432\u0438\u043c Bloom \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u043e\u043b\u0435\u0439             BloomIndex(                 name=\"advanced_multi_field_bloom_idx\",                 fields=[                     \"char_field_1_bloom\",                     \"char_field_2_bloom\",                     \"integer_field_3_bloom\",                     \"integer_field_4_bloom\"                 ],             ),             # \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u044f             BTreeIndex(                 name=\"advanced_multi_field_1_btree_idx\",                  fields=[\"char_field_1_btree\"]             ),             BTreeIndex(                 name=\"advanced_multi_field_2_btree_idx\",                 fields=[\"char_field_2_btree\"]             ),             BTreeIndex(                 name=\"advanced_multi_field_3_btree_idx\",                 fields=[\"integer_field_3_btree\"]             ),             BTreeIndex(                 name=\"advanced_multi_field_4_btree_idx\",                 fields=[\"integer_field_4_btree\"]             ),         ] <\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0437\u0430\u0432\u0435\u0434\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432.<\/p>\n<pre><code class=\"python\"># \u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 class ModelWithUnique(models.Model):     # \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u044f     unique_field = models.CharField(unique=True, max_length=255)     # \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e     default_index_field = models.CharField(db_index=True, max_length=255)     # \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u0435\u0439     unique_together_field_1 = models.CharField(max_length=255)     unique_together_field_2 = models.CharField(max_length=255)      class Meta:         # \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u0435\u0439         constraints = [             models.UniqueConstraint(                 name=\"advanced_unique_together_field_1_2\",                 fields=[\"unique_together_field_1\", \"unique_together_field_2\"]             ),         ]<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043e\u043f\u0438\u0448\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445, \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u0432\u044b\u0448\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 (\u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c SP-GiST).<\/p>\n<pre><code class=\"python\">class ModelWithIndexes(models.Model):     # \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0432\u044f\u0437\u0438 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438     m2m_field = models.ManyToManyField(ModelWithUnique)     fk_field = models.ForeignKey(ModelWithBloomIndex, on_delete=models.CASCADE)      # \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u043f\u043e \u0434\u0430\u0442\u0430\u043c     created_at = models.DateTimeField()     created_at_with_brin_index = models.DateTimeField()     created_at_with_btree_index = models.DateTimeField()      # \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043f\u043e\u043b\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u043e\u0438\u0441\u043a     big_text = models.TextField()     big_text_with_gin = models.TextField()     big_text_with_gist = models.TextField()      # \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0442\u043e\u0447\u043d\u043e\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435     small_text = models.CharField(max_length=255)     small_text_btree_index = models.CharField(max_length=255)     small_text_with_hash_index = models.CharField(max_length=255)      # \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0438\u043d\u0434\u0435\u043a\u0441     field_without_composite_index_1 = models.CharField(max_length=255)     field_without_composite_index_2 = models.CharField(max_length=255)     field_with_composite_index_1 = models.CharField(max_length=255)     field_with_composite_index_2 = models.CharField(max_length=255)      class Meta:         # \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432         indexes = [             # \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u043b\u044f \u0434\u0430\u0442             BrinIndex(                 name=\"advanced_created_at_brin\",                 fields=[\"created_at_with_brin_index\"]             ),             BTreeIndex(                 name=\"advanced_created_at_btree\",                 fields=[\"created_at_with_btree_index\"]             ),             # \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f             GinIndex(                 SearchVector(\"big_text_with_gin\", config=\"russian\"),                 name=\"advanced_big_text_gin\"             ),             GistIndex(                 SearchVector(\"big_text_with_gist\", config=\"russian\"),                 name=\"advanced_big_text_gist\"             ),             # \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430             HashIndex(                 name=\"advanced_small_text_hash\",                  fields=[\"small_text_with_hash_index\"]             ),             # \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435             BTreeIndex(                 name=\"advanced_small_text_btree\",                 fields=[\"small_text_btree_index\"]             ),             # \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0438\u043d\u0434\u0435\u043a\u0441             BTreeIndex(                 name=\"advanced_combined\",                  fields=[                     \"field_with_composite_index_1\",                     \"field_with_composite_index_2\"                 ]             ),         ]<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b Bloom \u0438\u043d\u0434\u0435\u043a\u0441\u0430, \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c <code>BloomExtension()<\/code> \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0432 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0435 <code>operations<\/code> \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0439 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e <a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/models\/indexes\/#index-options\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e<\/a> \u043f\u043e \u044f\u0432\u043d\u043e\u043c\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432.<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">import uuid from datetime import timedelta  from django.utils import timezone from factory.fuzzy import FuzzyText, FuzzyInteger  from advanced.models import (     ModelWithBloomIndex,     ModelWithUnique,     ModelWithIndexes )   # \u041c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0434\u043b\u044f ModelWithBloomIndex def create_model_with_bloom_index(count):     # \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439     text_15 = FuzzyText(length=15)     integer = FuzzyInteger(low=0, high=1000000)      instances = []     for _ in range(count):         # \u041f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u043e\u043b\u044f \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438         instances.append(ModelWithBloomIndex(             char_field_1=text_15.fuzz(),             char_field_2=text_15.fuzz(),             integer_field_3=integer.fuzz(),             integer_field_4=integer.fuzz(),             char_field_1_bloom=text_15.fuzz(),             char_field_2_bloom=text_15.fuzz(),             integer_field_3_bloom=integer.fuzz(),             integer_field_4_bloom=integer.fuzz(),             char_field_1_btree=text_15.fuzz(),             char_field_2_btree=text_15.fuzz(),             integer_field_3_btree=integer.fuzz(),             integer_field_4_btree=integer.fuzz(),         ))      # \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0430\u0447\u043a\u0430\u043c\u0438 \u043f\u043e 10 000     ModelWithBloomIndex.objects.bulk_create(         instances, batch_size=10000     )   # \u041c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0434\u043b\u044f ModelWithUnique def create_model_with_unique(count):     # \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 uuid      # P.S. \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u043e\u043d\u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e     # \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0438\u0445 \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a     uuids = (str(uuid.uuid4()) for _ in range(count * 4))     instances = []     for _ in range(count):         instances.append(ModelWithUnique(             unique_field=next(uuids),             default_index_field=next(uuids),             unique_together_field_1=next(uuids),             unique_together_field_2=next(uuids),         ))          # \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0430\u0447\u043a\u0430\u043c\u0438 \u043f\u043e 10 000     ModelWithUnique.objects.bulk_create(instances, batch_size=10000)   # \u041c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0434\u043b\u044f ModelWithIndexes def create_model_with_indexes(count):     # \u0418\u0442\u0435\u0440\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f id \u0437\u0430\u043f\u0438\u0441\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b     fk_ids = iter(         ModelWithBloomIndex.objects         .values_list(\"id\", flat=True)     )     # \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u0434\u0430\u0442     dates = (timezone.now() + timedelta(i) for i in range(count))     # \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0434\u043b\u044f uuid     uuids = (str(uuid.uuid4()) for _ in range(count * 10))      instances = []     for _ in range(count):         # \u041f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438         current_date = next(dates)         instances.append(ModelWithIndexes(             fk_field_id=next(fk_ids),             created_at=current_date,             created_at_with_brin_index=current_date,             created_at_with_btree_index=current_date,             big_text=next(uuids) * 5,             big_text_with_gin=next(uuids) * 5,             big_text_with_gist=next(uuids) * 5,             small_text=next(uuids),             small_text_btree_index=next(uuids),             small_text_with_hash_index=next(uuids),             field_with_composite_index_1=next(uuids),             field_with_composite_index_2=next(uuids),             field_without_composite_index_1=next(uuids),             field_without_composite_index_2=next(uuids),         ))      # \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0430\u0447\u043a\u0430\u043c\u0438 \u043f\u043e 10 000     ModelWithIndexes.objects.bulk_create(       instances, batch_size=10000     )   def create_model_with_indexes_m2m():     # \u0418\u0442\u0435\u0440\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f id \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b     m2m_ids = iter(         ModelWithUnique.objects         .values_list(\"id\", flat=True)     )     # \u0418\u0442\u0435\u0440\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f id \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432      # \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435     m2m_ids_reversed = iter(         ModelWithUnique.objects         .values_list(\"id\", flat=True).reverse()     )      m2m_instances = []     for instance in ModelWithIndexes.objects.all():         m2m_id = next(m2m_ids)         m2m_id_reversed = next(m2m_ids_reversed)          m2m_instances.append(ModelWithIndexes.m2m_field.through(             modelwithindexes_id=instance.id,             modelwithunique_id=m2m_id         ))         # \u041d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u043a\u0430\u043a django \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442 \u0434\u0443\u0431\u043b\u0438         if m2m_id != m2m_id_reversed:             m2m_instances.append(ModelWithIndexes.m2m_field.through(                 modelwithindexes_id=instance.id,                 modelwithunique_id=m2m_id_reversed             ))      # \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0430\u0447\u043a\u0430\u043c\u0438 \u043f\u043e 10 000     ModelWithIndexes.m2m_field.through.objects.bulk_create(         m2m_instances, batch_size=10000     )  # \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0434\u043b\u044f ModelWithBloomIndex create_model_with_bloom_index(1_000_000) # \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0434\u043b\u044f ModelWithUnique create_model_with_unique(1_000_000) # \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0434\u043b\u044f ModelWithIndexes create_model_with_indexes(1_000_000) # \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c m2m \u0441\u0432\u044f\u0437\u0438 \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 ModelWithIndexes create_model_with_indexes_m2m() <\/code><\/pre>\n<\/div>\n<\/details>\n<p><a class=\"anchor\" name=\"%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D1%8B-%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%BE%D0%B2-%D0%B8-%D0%B8%D1%85-%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%BE\" id=\"\u0440\u0430\u0437\u043c\u0435\u0440\u044b-\u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432-\u0438-\u0438\u0445-\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\"><\/a><\/p>\n<h3>\u0420\u0430\u0437\u043c\u0435\u0440\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0438 \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043d\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043c\u0435\u0441\u0442\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>\\dti+<\/code> \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 <code>psql<\/code>, \u043e\u043d\u0430 \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0445 \u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445.<\/p>\n<p><strong>\u0422\u0430\u0431\u043b\u0438\u0446\u0430<\/strong> advanced_modelwithbloomindex (<code>ModelWithBloomIndex<\/code>) 150 MB<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"312\" width=\"312\">\n<p align=\"center\"><strong>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0430<\/strong><\/p>\n<\/td>\n<td data-colwidth=\"195\" width=\"195\">\n<p align=\"center\"><strong>\u0422\u0438\u043f \u0438\u043d\u0434\u0435\u043a\u0441\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong>\u0420\u0430\u0437\u043c\u0435\u0440<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"312\" width=\"312\">\n<p align=\"left\">advanced_modelwithbloomindex_pkey<\/p>\n<\/td>\n<td data-colwidth=\"195\" width=\"195\">\n<p align=\"left\">btree<\/p>\n<\/td>\n<td>\n<p align=\"left\">21 MB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"312\" width=\"312\">\n<p align=\"left\">advanced_multi_field_1_btree_idx<\/p>\n<\/td>\n<td data-colwidth=\"195\" width=\"195\">\n<p align=\"left\">btree<\/p>\n<\/td>\n<td>\n<p align=\"left\">37 MB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"312\" width=\"312\">\n<p align=\"left\">advanced_multi_field_2_btree_idx<\/p>\n<\/td>\n<td data-colwidth=\"195\" width=\"195\">\n<p align=\"left\">btree<\/p>\n<\/td>\n<td>\n<p align=\"left\">37 MB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"312\" width=\"312\">\n<p align=\"left\">advanced_multi_field_3_btree_idx<\/p>\n<\/td>\n<td data-colwidth=\"195\" width=\"195\">\n<p align=\"left\">btree<\/p>\n<\/td>\n<td>\n<p align=\"left\">24 MB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"312\" width=\"312\">\n<p align=\"left\">advanced_multi_field_4_btree_idx<\/p>\n<\/td>\n<td data-colwidth=\"195\" width=\"195\">\n<p align=\"left\">btree<\/p>\n<\/td>\n<td>\n<p align=\"left\">23 MB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"312\" width=\"312\">\n<p align=\"left\">advanced_multi_field_bloom_idx<\/p>\n<\/td>\n<td data-colwidth=\"195\" width=\"195\">\n<p align=\"left\">bloom<\/p>\n<\/td>\n<td>\n<p align=\"left\">15 MB<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0417\u0434\u0435\u0441\u044c \u0438\u043d\u0434\u0435\u043a\u0441 <code>advanced_modelwithbloomindex_pkey<\/code> \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<em> <\/em>\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043c\u044b \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u044f\u0432\u043d\u043e.<em> <\/em><\/p>\n<p>\u041c\u043e\u0436\u0435\u043c \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e <code>advanced_multi_field_bloom_idx<\/code> \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u043c\u0435\u0441\u0442\u0430 \u0447\u0435\u043c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 4 \u043f\u043e\u043b\u0435\u0439 \u043e\u043d \u043d\u0443\u0436\u0435\u043d \u0432 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0435, \u0447\u0442\u043e \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u043c. \u0425\u043e\u0442\u044c \u0438 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u043d\u0435\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0434\u043e\u043b\u044c\u0448\u0435<em>.<\/em><\/p>\n<p><strong>\u0422\u0430\u0431\u043b\u0438\u0446\u0430<\/strong> advanced_modelwithunique (<code>ModelWithUnique<\/code>) 291 MB<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"471\" width=\"471\">\n<p align=\"center\"><strong>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0430<\/strong><\/p>\n<\/td>\n<td data-colwidth=\"121\" width=\"121\">\n<p align=\"center\"><strong>\u0422\u0438\u043f \u0438\u043d\u0434\u0435\u043a\u0441\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong>\u0420\u0430\u0437\u043c\u0435\u0440<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"471\" width=\"471\">\n<p align=\"left\">advanced_modelwithunique_default_index_field_cb2b39ae<\/p>\n<\/td>\n<td data-colwidth=\"121\" width=\"121\">\n<p align=\"left\">btree<\/p>\n<\/td>\n<td>\n<p align=\"left\">118 MB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"471\" width=\"471\">\n<p align=\"left\">advanced_modelwithunique_default_index_field_cb2b39ae_like<\/p>\n<\/td>\n<td data-colwidth=\"121\" width=\"121\">\n<p align=\"left\">btree<\/p>\n<\/td>\n<td>\n<p align=\"left\">118 MB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"471\" width=\"471\">\n<p align=\"left\">advanced_modelwithunique_pkey<\/p>\n<\/td>\n<td data-colwidth=\"121\" width=\"121\">\n<p align=\"left\">btree<\/p>\n<\/td>\n<td>\n<p align=\"left\">34 MB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"471\" width=\"471\">\n<p align=\"left\">advanced_modelwithunique_unique_field_key<\/p>\n<\/td>\n<td data-colwidth=\"121\" width=\"121\">\n<p align=\"left\">btree<\/p>\n<\/td>\n<td>\n<p align=\"left\">119 MB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"471\" width=\"471\">\n<p align=\"left\">advanced_modelwithunique_unique_field_f7af07ff_like<\/p>\n<\/td>\n<td data-colwidth=\"121\" width=\"121\">\n<p align=\"left\">btree<\/p>\n<\/td>\n<td>\n<p align=\"left\">119 MB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"471\" width=\"471\">\n<p align=\"left\">advanced_unique_together_field_1_2<\/p>\n<\/td>\n<td data-colwidth=\"121\" width=\"121\">\n<p align=\"left\">btree<\/p>\n<\/td>\n<td>\n<p align=\"left\">206 MB<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0418\u043d\u0434\u0435\u043a\u0441\u044b <code>advanced_modelwithunique_default_index_field_cb2b39ae<\/code> \u0438 <code>advanced_modelwithunique_default_index_field_cb2b39ae_like<\/code> \u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043b\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f <code>default_index_field<\/code> \u043f\u0440\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0438 <code>db_index=True<\/code>. \u0418\u043c\u0435\u0439\u0442\u0435 \u0432 \u0432\u0438\u0434\u0443, \u0447\u0442\u043e django \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0440\u0430\u0437\u0443 2 \u0438\u043d\u0434\u0435\u043a\u0441\u0430: \u043f\u0435\u0440\u0432\u044b\u0439 \u0434\u043b\u044f \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430, \u0432\u0442\u043e\u0440\u043e\u0439 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <code>__contains<\/code> (<code>LIKE '%pattern%'<\/code>).<\/p>\n<p>\u0418\u043d\u0434\u0435\u043a\u0441 <code>advanced_modelwithunique_pkey<\/code> \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043a\u0430\u043a \u0438 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<p>\u0418\u043d\u0434\u0435\u043a\u0441\u044b <code>advanced_modelwithunique_unique_field_key<\/code> \u0438 <code>advanced_modelwithunique_unique_field_f7af07ff_like<\/code> \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u044f <code>unique_field<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>unique=True<\/code>.<\/p>\n<p><code>advanced_unique_together_field_1_2<\/code> \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u043f\u0430\u0440\u0435 \u043f\u043e\u043b\u0435\u0439, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u0440\u044b \u043f\u043e\u043b\u0435\u0439 <code>unique_together_field_1<\/code> \u0438 <code>unique_together_field_2<\/code>. <\/p>\n<p><strong>\u0422\u0430\u0431\u043b\u0438\u0446\u0430<\/strong> advanced_modelwithindexes (<code>ModelWithIndexes<\/code>) 868 MB<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"386\" width=\"386\">\n<p align=\"center\"><strong>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0430<\/strong><\/p>\n<\/td>\n<td data-colwidth=\"160\" width=\"160\">\n<p align=\"center\"><strong>\u0422\u0438\u043f \u0438\u043d\u0434\u0435\u043a\u0441\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong>\u0420\u0430\u0437\u043c\u0435\u0440<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"386\" width=\"386\">\n<p align=\"left\">advanced_big_text_gin<\/p>\n<\/td>\n<td data-colwidth=\"160\" width=\"160\">\n<p align=\"left\">gin<\/p>\n<\/td>\n<td>\n<p align=\"left\">422 MB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"386\" width=\"386\">\n<p align=\"left\">advanced_big_text_gist<\/p>\n<\/td>\n<td data-colwidth=\"160\" width=\"160\">\n<p align=\"left\">gist<\/p>\n<\/td>\n<td>\n<p align=\"left\">59 MB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"386\" width=\"386\">\n<p align=\"left\">advanced_combined<\/p>\n<\/td>\n<td data-colwidth=\"160\" width=\"160\">\n<p align=\"left\">btree<\/p>\n<\/td>\n<td>\n<p align=\"left\">134 MB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"386\" width=\"386\">\n<p align=\"left\">advanced_created_at_brin<\/p>\n<\/td>\n<td data-colwidth=\"160\" width=\"160\">\n<p align=\"left\">brin<\/p>\n<\/td>\n<td>\n<p align=\"left\">64 kB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"386\" width=\"386\">\n<p align=\"left\">advanced_created_at_btree<\/p>\n<\/td>\n<td data-colwidth=\"160\" width=\"160\">\n<p align=\"left\">btree<\/p>\n<\/td>\n<td>\n<p align=\"left\">22 MB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"386\" width=\"386\">\n<p align=\"left\">advanced_modelwithindexes_fk_field_id_48ab936e<\/p>\n<\/td>\n<td data-colwidth=\"160\" width=\"160\">\n<p align=\"left\">btree<\/p>\n<\/td>\n<td>\n<p align=\"left\">22 MB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"386\" width=\"386\">\n<p align=\"left\">advanced_modelwithindexes_pkey<\/p>\n<\/td>\n<td data-colwidth=\"160\" width=\"160\">\n<p align=\"left\">btree<\/p>\n<\/td>\n<td>\n<p align=\"left\">22 MB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"386\" width=\"386\">\n<p align=\"left\">advanced_small_text_btree<\/p>\n<\/td>\n<td data-colwidth=\"160\" width=\"160\">\n<p align=\"left\">btree<\/p>\n<\/td>\n<td>\n<p align=\"left\">76 MB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"386\" width=\"386\">\n<p align=\"left\">advanced_small_text_hash<\/p>\n<\/td>\n<td data-colwidth=\"160\" width=\"160\">\n<p align=\"left\">hash<\/p>\n<\/td>\n<td>\n<p align=\"left\">37 MB<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0418\u043d\u0434\u0435\u043a\u0441 <code>advanced_modelwithindexes_pkey<\/code> \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<p>\u0418\u043d\u0434\u0435\u043a\u0441 <code>advanced_modelwithindexes_fk_field_id_48ab936e<\/code> \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b <code>ModelWithBloomIndex<\/code>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u0432 \u043f\u043e\u043b\u0435 <code>fk_field<\/code>.<\/p>\n<p>\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 \u044f\u0432\u043d\u043e.<\/p>\n<p><strong>\u0422\u0430\u0431\u043b\u0438\u0446\u0430<\/strong> advanced_modelwithindexes_m2m_field (<code>ModelWithIndexes.m2m_field.through<\/code>) 50 MB<\/p>\n<p>\u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0434\u043b\u044f m2m \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 <code>ModelWithIndexes<\/code> \u0438 <code>ModelWithUnique<\/code>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u0432 \u043f\u043e\u043b\u0435 <code>m2m_field<\/code>. <\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"467\" width=\"467\">\n<p align=\"center\"><strong>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0430<\/strong><\/p>\n<\/td>\n<td data-colwidth=\"111\" width=\"111\">\n<p align=\"center\"><strong>\u0422\u0438\u043f \u0438\u043d\u0434\u0435\u043a\u0441\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong>\u0420\u0430\u0437\u043c\u0435\u0440<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"467\" width=\"467\">\n<p align=\"left\">advanced_modelwithindexe_modelwithindexes_id_mode_3fdedf4b_uniq<\/p>\n<\/td>\n<td data-colwidth=\"111\" width=\"111\">\n<p align=\"left\">btree<\/p>\n<\/td>\n<td>\n<p align=\"left\">21 MB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"467\" width=\"467\">\n<p align=\"left\">advanced_modelwithindexes__modelwithindexes_id_47db69d5<\/p>\n<\/td>\n<td data-colwidth=\"111\" width=\"111\">\n<p align=\"left\">btree<\/p>\n<\/td>\n<td>\n<p align=\"left\">37 MB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"467\" width=\"467\">\n<p align=\"left\">advanced_modelwithindexes_m2m_field_modelwithunique_id_8139e026<\/p>\n<\/td>\n<td data-colwidth=\"111\" width=\"111\">\n<p align=\"left\">btree<\/p>\n<\/td>\n<td>\n<p align=\"left\">37 MB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"467\" width=\"467\">\n<p align=\"left\">advanced_modelwithindexes_m2m_field_pkey<\/p>\n<\/td>\n<td data-colwidth=\"111\" width=\"111\">\n<p align=\"left\">btree<\/p>\n<\/td>\n<td>\n<p align=\"left\">24 MB<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0414\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u0441\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.<\/p>\n<p>\u0418\u043d\u0434\u0435\u043a\u0441\u044b <code>advanced_modelwithindexes__modelwithindexes_id_47db69d5<\/code> \u0438 <code>advanced_modelwithindexes_m2m_field_modelwithunique_id_8139e026<\/code> \u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446 <code>ModelWithIndexes<\/code> \u0438 <code>ModelWithUnique<\/code>.<\/p>\n<p>\u0418\u043d\u0434\u0435\u043a\u0441 <code>advanced_modelwithindexes_m2m_field_pkey<\/code> \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0441\u0430\u043c\u043e\u0439 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<p>\u0418\u043d\u0434\u0435\u043a\u0441 <code>advanced_modelwithindexe_modelwithindexes_id_mode_3fdedf4b_uniq<\/code> \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0430\u0440\u044b \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439. <\/p>\n<p><a class=\"anchor\" name=\"%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%BE%D0%B2\" id=\"\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435-\u0440\u0430\u0431\u043e\u0442\u044b-\u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432\"><\/a><\/p>\n<h3>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432<\/h3>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0431\u0443\u0434\u0443\u0442 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u0440\u0438 \u0443\u0447\u0430\u0441\u0442\u0438\u0438 \u043f\u043e\u043b\u0435\u0439 \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438 \u0438 \u0431\u0435\u0437 \u043d\u0438\u0445.<\/p>\n<p>\u0417\u0430\u043f\u0440\u043e\u0441\u044b \u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438 <code>ModelWithUnique<\/code> \u0438 <code>ModelWithIndexes.m2m_field.through<\/code> \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u043d\u0443\u0436\u043d\u044b \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u0438 \u043a\u0430\u043a\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b django \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<p>\u0415\u0449\u0435 \u0440\u0430\u0437 \u0430\u043a\u0446\u0435\u043d\u0442\u0438\u0440\u0443\u044e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 <code>db_index=True<\/code> \u0438 <code>unique=True<\/code> django \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043f\u043e 2 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0438 \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u0430\u0441 \u043d\u0435 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442, \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u044f\u0432\u043d\u043e \u0432 <code>Meta<\/code> \u0432\u0430\u0448\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<p><strong>\u041f\u043e\u0438\u0441\u043a \u043f\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u043f\u043e\u043b\u044f\u043c<\/strong> (B-Tree \u0438 Bloom).<\/p>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u044b <code>ModelWithBloomIndex<\/code> \u0438 \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0432\u0435\u0434\u0435\u0442 \u0441\u0435\u0431\u044f \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u043c \u0431\u0435\u0437 \u0438\u043d\u0434\u0435\u043a\u0441\u0430.<\/p>\n<pre><code class=\"python\">from datetime import date  from advanced.models import ModelWithBloomIndex  # \u0417\u0434\u0435\u0441\u044c \u0438 \u0434\u0430\u043b\u0435\u0435 \u0441\u0440\u0430\u0437\u0443 \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u043b\u0430\u043d \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 explain(ModelWithBloomIndex.objects.filter(     char_field_1=\"uTSdXupYPVOaDtm\",     integer_field_4=460098 )) <\/code><\/pre>\n<pre><code class=\"sql\">\u0417\u0434\u0435\u0441\u044c \u0438\u0434\u0435\u0442 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u0441\u0430\u043c\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 Gather  (cost=1000.00..26481.10 rows=1 width=128) (actual time=35.628..38.325 rows=1 loops=1)   Workers Planned: 2   Workers Launched: 2   -&gt;  Parallel Seq Scan on advanced_modelwithbloomindex  (cost=0.00..25481.00 rows=1 width=128) (actual time=25.018..25.019 rows=0 loops=3)         Filter: (((char_field_1)::text = 'uTSdXupYPVOaDtm'::text) AND (integer_field_4 = 460098))         Rows Removed by Filter: 333333 Planning Time: 0.074 ms Execution Time: 38.358 ms<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043f\u043e\u0438\u0441\u043a \u043f\u043e B-Tree \u0438\u043d\u0434\u0435\u043a\u0441\u0443.<\/p>\n<pre><code class=\"python\">explain(ModelWithBloomIndex.objects.filter(     char_field_1_btree=\"LhnDapYoCVXWYCs\",     integer_field_4_btree=113736 ))<\/code><\/pre>\n<pre><code class=\"sql\">Index Scan using advanced_multi_field_1_btree_idx on advanced_modelwithbloomindex  (cost=0.42..8.45 rows=1 width=128) (actual time=0.064..0.065 rows=1 loops=1)   Index Cond: ((char_field_1_btree)::text = 'LhnDapYoCVXWYCs'::text)   Filter: (integer_field_4_btree = 113736) Planning Time: 0.072 ms Execution Time: 0.076 ms<\/code><\/pre>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u0434\u043b\u044f \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u043f\u043e\u043b\u044f <code>char_field_2_btree<\/code>. \u041c\u044b \u0441\u0440\u0430\u0437\u0443 \u0432\u0438\u0434\u0438\u043c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u043d\u0435 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u043b\u0438 \u0435\u0433\u043e, \u0431\u044b\u043b \u0431\u044b \u0432\u044b\u0431\u0440\u0430\u043d \u0434\u0440\u0443\u0433\u043e\u0439 \u0438\u043d\u0434\u0435\u043a\u0441, \u0438 \u0434\u043b\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0440\u0430\u0437\u043d\u043e\u0439 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u0435\u0439, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u043e\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0432 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435.<\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 Bloom.<\/p>\n<pre><code class=\"python\">explain(ModelWithBloomIndex.objects.filter(     char_field_1_bloom=\"MLgdOGMnnHeyZgt\",     integer_field_4_bloom=496094, ))<\/code><\/pre>\n<pre><code class=\"sql\">Bitmap Heap Scan on advanced_modelwithbloomindex  (cost=17848.00..17852.02 rows=1 width=128) (actual time=7.692..7.694 rows=1 loops=1)   Recheck Cond: (((char_field_1_bloom)::text = 'MLgdOGMnnHeyZgt'::text) AND (integer_field_4_bloom = 496094))   Rows Removed by Index Recheck: 38   Heap Blocks: exact=39   -&gt;  Bitmap Index Scan on advanced_multi_field_bloom_idx  (cost=0.00..17848.00 rows=1 width=0) (actual time=7.428..7.429 rows=39 loops=1)         Index Cond: (((char_field_1_bloom)::text = 'MLgdOGMnnHeyZgt'::text) AND (integer_field_4_bloom = 496094)) Planning Time: 0.057 ms Execution Time: 7.771 ms<\/code><\/pre>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441 <code>advanced_multi_field_bloom_idx<\/code>. \u0422\u0430\u043a \u043a\u0430\u043a \u0438\u043d\u0434\u0435\u043a\u0441 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0442\u043e\u0447\u043d\u044b\u043c, \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c\u0441\u044f \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c, \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434, \u0447\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u0430\u044e\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u0432 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u043e\u0438\u0441\u043a\u0430.<\/p>\n<p>\u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 Bloom \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0449\u0443\u0442\u0441\u044f \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0434\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 B-Tree, \u043d\u043e \u0441\u0430\u043c \u0438\u043d\u0434\u0435\u043a\u0441 \u0432\u0435\u0441\u0438\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d \u0441\u0440\u0430\u0437\u0443 \u043a\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u043f\u043e\u043b\u044f\u043c.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u0432 \u043c\u0435\u0441\u0442\u0435 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0438 \u0432\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0445\u043e\u0442\u044f \u0431\u044b \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u043b\u043d\u044b\u0445 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439, Bloom \u0438\u043d\u0434\u0435\u043a\u0441 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c.<\/p>\n<p><strong>\u041f\u043e\u0438\u0441\u043a \u043f\u043e \u0434\u0430\u0442\u0430\u043c<\/strong> (Brin \u0438 B-Tree)<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a <code>ModelWithIndexes<\/code>. <\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043f\u043e\u0438\u0441\u043a \u0432\u0435\u0434\u0435\u0442 \u0441\u0435\u0431\u044f \u0441 \u0434\u0430\u0442\u0430\u043c\u0438. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430.<\/p>\n<pre><code class=\"python\">from advanced.models import ModelWithIndexes  explain(ModelWithIndexes.objects.filter(     created_at__lt=date(2050, 1, 1), ))<\/code><\/pre>\n<pre><code class=\"sql\">\u0417\u0434\u0435\u0441\u044c \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0434\u0435\u0442 \u043f\u043e \u0441\u0430\u043c\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 Gather  (cost=1000.00..118257.88 rows=9375 width=851) (actual time=2.576..62.615 rows=8970 loops=1)   Workers Planned: 2   Workers Launched: 2   -&gt;  Parallel Seq Scan on advanced_modelwithindexes  (cost=0.00..116320.38 rows=3906 width=851) (actual time=29.265..47.775 rows=2990 loops=3)         Filter: (created_at &lt; '2050-01-01 00:00:00+00'::timestamp with time zone)         Rows Removed by Filter: 330343 Planning Time: 0.077 ms Execution Time: 63.168 ms<\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 B-Tree.<\/p>\n<pre><code class=\"python\">explain(ModelWithIndexes.objects.filter(     created_at_with_btree_index__lt=date(2050, 1, 1), ))<\/code><\/pre>\n<pre><code class=\"sql\">Index Scan using advanced_created_at_btree on advanced_modelwithindexes  (cost=0.42..1318.56 rows=9379 width=851) (actual time=0.016..3.206 rows=8970 loops=1)   Index Cond: (created_at_with_btree_index &lt; '2050-01-01 00:00:00+00'::timestamp with time zone) Planning Time: 0.212 ms Execution Time: 3.351 ms<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 <code>advanced_created_at_btree<\/code> \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043e\u0449\u0443\u0442\u0438\u043c\u044b\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442, \u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0434\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0432\u0435\u0441\u0438\u0442 22 MB, \u0445\u043e\u0442\u044c \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043a\u0440\u043e\u043c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0440\u0430\u0437\u043c\u0435\u0440 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 Brin \u043a\u0443\u0434\u0430 \u043c\u0435\u043d\u044c\u0448\u0435.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 Brin.<\/p>\n<pre><code class=\"python\">explain(ModelWithIndexes.objects.filter(     created_at_with_brin_index__lt=date(2050, 1, 1), ))<\/code><\/pre>\n<pre><code class=\"sql\">Bitmap Heap Scan on advanced_modelwithindexes  (cost=22.63..30876.16 rows=9375 width=851) (actual time=0.109..5.507 rows=8970 loops=1)   Recheck Cond: (created_at_with_brin_index &lt; '2050-01-01 00:00:00+00'::timestamp with time zone)   Rows Removed by Index Recheck: 310   Heap Blocks: lossy=1032   -&gt;  Bitmap Index Scan on advanced_created_at_brin  (cost=0.00..20.29 rows=10357 width=0) (actual time=0.102..0.103 rows=10320 loops=1)         Index Cond: (created_at_with_brin_index &lt; '2050-01-01 00:00:00+00'::timestamp with time zone) Planning Time: 0.122 ms Execution Time: 5.925 ms<\/code><\/pre>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0438\u043d\u0434\u0435\u043a\u0441 Brin \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0438 Bloom \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0442\u043e\u0447\u043d\u044b\u043c, \u043d\u0430\u043c \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0438 \u0443\u0442\u043e\u0447\u043d\u044f\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043f\u043e\u0447\u0442\u0438 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u043f\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u043a\u0430\u043a \u0438 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 B-Tree, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0432\u0435\u0441\u0438\u0442 \u0432\u0441\u0435\u0433\u043e 64 kB \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441 1 000 000 \u0437\u0430\u043f\u0438\u0441\u0435\u0439.<\/p>\n<p><strong>\u041f\u043e\u043b\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u043e\u0438\u0441\u043a<\/strong> (GIN, GiST \u0438 B-Tree)<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u0435\u0437 \u0438\u043d\u0434\u0435\u043a\u0441\u0430.<\/p>\n<pre><code class=\"python\">from django.contrib.postgres.search import SearchVector, SearchQuery  explain(     ModelWithIndexes.objects     # \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0442\u0435\u043a\u0441\u0442 \u0432 \u0432\u0435\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430     .alias(search=SearchVector(\"big_text\", config=\"russian\"))     # \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435     .filter(search=SearchQuery(\"123\", config=\"russian\")) )<\/code><\/pre>\n<pre><code class=\"sql\">\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0441\u0430\u043c\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 Gather  (cost=1000.00..221987.88 rows=5000 width=851) (actual time=4896.181..4900.291 rows=0 loops=1)   Workers Planned: 2   Workers Launched: 2   -&gt;  Parallel Seq Scan on advanced_modelwithindexes  (cost=0.00..220487.88 rows=2083 width=851) (actual time=4882.752..4882.752 rows=0 loops=3)         Filter: (to_tsvector('russian'::regconfig, COALESCE(big_text, ''::text)) @@ '''123'''::tsquery)         Rows Removed by Filter: 333333 Planning Time: 0.177 ms Execution Time: 4900.982 ms<\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 GIN.<\/p>\n<pre><code class=\"python\">explain(     ModelWithIndexes.objects     # \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0442\u0435\u043a\u0441\u0442 \u0432 \u0432\u0435\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430     .alias(search=SearchVector(\"big_text_with_gin\", config=\"russian\"))     # \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435     .filter(search=SearchQuery(\"123\", config=\"russian\")) )<\/code><\/pre>\n<pre><code class=\"sql\">Bitmap Heap Scan on advanced_modelwithindexes  (cost=27.02..1125.84 rows=267 width=851) (actual time=0.040..0.041 rows=0 loops=1)   Recheck Cond: (to_tsvector('russian'::regconfig, COALESCE(big_text_with_gin, ''::text)) @@ '''123'''::tsquery)   -&gt;  Bitmap Index Scan on advanced_big_text_gin  (cost=0.00..26.95 rows=267 width=0) (actual time=0.037..0.037 rows=0 loops=1)         Index Cond: (to_tsvector('russian'::regconfig, COALESCE(big_text_with_gin, ''::text)) @@ '''123'''::tsquery) Planning Time: 0.268 ms Execution Time: 0.062 ms<\/code><\/pre>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u044b\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0438\u043d\u0434\u0435\u043a\u0441 <code>advanced_big_text_gin<\/code> \u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u043e\u0438\u0441\u043a\u0430, \u043d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u043c \u044d\u0442\u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c GiST.<\/p>\n<pre><code class=\"python\">explain(     ModelWithIndexes.objects     # \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0442\u0435\u043a\u0441\u0442 \u0432 \u0432\u0435\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430     .alias(search=SearchVector(\"big_text_with_gist\", config=\"russian\"))     # \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435     .filter(search=SearchQuery(\"123\", config=\"russian\")) )<\/code><\/pre>\n<pre><code class=\"sql\">Index Scan using advanced_big_text_gist on advanced_modelwithindexes  (cost=0.29..1084.96 rows=267 width=851) (actual time=29.907..29.908 rows=0 loops=1)   Index Cond: (to_tsvector('russian'::regconfig, COALESCE(big_text_with_gist, ''::text)) @@ '''123'''::tsquery) Planning Time: 0.147 ms Execution Time: 29.925 ms<\/code><\/pre>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c, \u043c\u044b \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u0432 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u043d\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043a\u0443\u0434\u0430 \u0445\u0443\u0436\u0435, \u0447\u0435\u043c \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 GIN. \u0421\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e\u0441\u0442\u0438 \u0440\u0430\u0434\u0438, \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0438 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e GiST \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043a\u0443\u0434\u0430 \u043c\u0435\u043d\u044c\u0448\u0435 \u043c\u0435\u0441\u0442\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u043d\u043e \u0438 \u0442\u0443\u0442 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e, \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u043a\u043b\u044e\u0447\u0435\u0439 \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0445, \u0442\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0438\u0442\u044c GIN \u0438\u043d\u0434\u0435\u043a\u0441.<\/p>\n<p><strong>\u041f\u043e\u0438\u0441\u043a \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f<\/strong> (HASH \u0438 B-Tree)<\/p>\n<p>\u0421\u043d\u043e\u0432\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u043f\u043e\u0438\u0441\u043a\u0430 \u0431\u0435\u0437 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432.<\/p>\n<pre><code class=\"python\">explain(ModelWithIndexes.objects.filter(     small_text=\"47c58638-2847-4dc7-8462-a721e8235516\", ))<\/code><\/pre>\n<pre><code class=\"sql\">\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0441\u0430\u043c\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 Gather  (cost=1000.00..117320.48 rows=1 width=851) (actual time=67.964..71.498 rows=1 loops=1)   Workers Planned: 2   Workers Launched: 2   -&gt;  Parallel Seq Scan on advanced_modelwithindexes  (cost=0.00..116320.38 rows=1 width=851) (actual time=56.045..56.046 rows=0 loops=3)         Filter: ((small_text)::text = '47c58638-2847-4dc7-8462-a721e8235516'::text)         Rows Removed by Filter: 333333 Planning Time: 0.100 ms Execution Time: 71.880 ms<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 B-Tree<\/p>\n<pre><code class=\"python\">explain(ModelWithIndexes.objects.filter(     small_text_btree_index=\"2d9d006c-d77f-4e92-8856-c8835c5b4129\", ))<\/code><\/pre>\n<pre><code class=\"sql\">Index Scan using advanced_small_text_btree on advanced_modelwithindexes  (cost=0.42..8.44 rows=1 width=851) (actual time=0.042..0.043 rows=1 loops=1)   Index Cond: ((small_text_btree_index)::text = '2d9d006c-d77f-4e92-8856-c8835c5b4129'::text) Planning Time: 0.065 ms Execution Time: 0.054 ms<\/code><\/pre>\n<p>\u041e\u0436\u0438\u0434\u0430\u0435\u043c\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u043e\u0438\u0441\u043a\u0430.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 HASH.<\/p>\n<pre><code class=\"python\">explain(ModelWithIndexes.objects.filter(     small_text_with_hash_index=\"9e3f41fb-51fd-405d-bae7-0da696c7f7b6\", ))<\/code><\/pre>\n<pre><code class=\"sql\">Index Scan using advanced_small_text_hash on advanced_modelwithindexes  (cost=0.00..8.02 rows=1 width=851) (actual time=0.012..0.013 rows=1 loops=1)   Index Cond: ((small_text_with_hash_index)::text = '9e3f41fb-51fd-405d-bae7-0da696c7f7b6'::text) Planning Time: 0.063 ms Execution Time: 0.024 ms<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0412 \u0441\u0440\u0435\u0434\u043d\u0435\u043c, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0434\u043b\u0438\u043d\u044b \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043b\u0443\u0447\u0448\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 HASH \u0438\u043d\u0434\u0435\u043a\u0441\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0449\u0443\u0442\u0438\u043c\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u043c\u0435\u0441\u0442\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435.<\/p>\n<p><strong>\u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441<\/strong><\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u043e 2 \u043f\u043e\u043b\u044f\u043c \u0431\u0435\u0437 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432.<\/p>\n<pre><code class=\"python\">explain(ModelWithIndexes.objects.filter(     field_without_composite_index_1=\"733f5adf-f389-4fdf-984e-8970afd6e28b\",     field_without_composite_index_2=\"221d82bf-1d71-43fd-a854-62892d393b23\", ))<\/code><\/pre>\n<pre><code class=\"sql\">\u041a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0441\u0430\u043c\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 Gather  (cost=1000.00..118362.15 rows=1 width=851) (actual time=69.031..72.790 rows=1 loops=1)   Workers Planned: 2   Workers Launched: 2   -&gt;  Parallel Seq Scan on advanced_modelwithindexes  (cost=0.00..117362.05 rows=1 width=851) (actual time=59.619..59.620 rows=0 loops=3)         Filter: (((field_without_composite_index_1)::text = '733f5adf-f389-4fdf-984e-8970afd6e28b'::text) AND ((field_without_composite_index_2)::text = '221d82bf-1d71-43fd-a854-62892d393b23'::text))         Rows Removed by Filter: 333333 Planning Time: 0.060 ms Execution Time: 73.038 ms<\/code><\/pre>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043a\u0430\u0442\u044c \u043f\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u0443.<\/p>\n<pre><code class=\"python\">explain(ModelWithIndexes.objects.filter(     field_with_composite_index_1=\"39908556-921f-4670-b225-7a2226f4cd30\",     field_with_composite_index_2=\"1a6d2c41-add4-4993-a67f-0f0a4a7724e2\", ))<\/code><\/pre>\n<pre><code class=\"sql\">Index Scan using advanced_combined on advanced_modelwithindexes  (cost=0.55..8.57 rows=1 width=851) (actual time=0.141..0.145 rows=1 loops=1)   Index Cond: (((field_with_composite_index_1)::text = '39908556-921f-4670-b225-7a2226f4cd30'::text) AND ((field_with_composite_index_2)::text = '1a6d2c41-add4-4993-a67f-0f0a4a7724e2'::text)) Planning Time: 0.232 ms Execution Time: 0.185 ms<\/code><\/pre>\n<p>\u041e\u0436\u0438\u0434\u0430\u0435\u043c\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u043e\u0438\u0441\u043a\u0430. \u0421 \u0434\u0430\u043d\u043d\u044b\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c \u0441\u0442\u043e\u0438\u0442 \u0431\u044b\u0442\u044c \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u044b\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u0435\u0441\u0442\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435. \u0421\u0430\u043c\u044b\u043c \u0447\u0430\u0441\u0442\u044b\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0424\u0418\u041e, \u043a\u043e\u0433\u0434\u0430 \u0443 \u0432\u0430\u0441 \u043d\u0435\u0442 \u043e\u0431\u0449\u0435\u0433\u043e \u0434\u043b\u044f \u043d\u0438\u0445 \u043f\u043e\u043b\u044f \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p><a class=\"anchor\" name=\"%D0%B8%D1%82%D0%BE%D0%B3%D0%B8-%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B-3\" id=\"\u0438\u0442\u043e\u0433\u0438-\u0433\u043b\u0430\u0432\u044b-3\"><\/a><\/p>\n<h3>\u0418\u0442\u043e\u0433\u0438 \u0433\u043b\u0430\u0432\u044b<\/h3>\n<p>\u0417\u0430\u0444\u0438\u043d\u0430\u043b\u0438\u043c \u0434\u0430\u043d\u043d\u0443\u044e \u0433\u043b\u0430\u0432\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0432\u044b\u0432\u043e\u0434\u0430\u043c\u0438:<\/p>\n<ol>\n<li>\n<p>\u0414\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0432\u0430\u043c\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u0442\u0438\u043f\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0434\u043b\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0442\u043e\u0439 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435\u043b\u044c\u0437\u044f \u0431\u0435\u0437\u0434\u0443\u043c\u043d\u043e \u0432\u0435\u0448\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043d\u0430 \u0432\u0441\u0435 \u043f\u043e\u043b\u044f, \u043e\u043d\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u044e\u0442 \u0432\u0441\u0442\u0430\u0432\u043a\u0443 \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445<\/p>\n<\/li>\n<li>\n<p>Django \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438 \u0442\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0437\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0437\u0430\u0434\u0430\u0447, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0431\u043e\u0440 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u043c \u0438 \u0443\u043c\u0435\u0441\u0442\u043d\u044b\u043c<\/p>\n<\/li>\n<li>\n<p>\u0427\u0442\u043e \u0432\u0430\u043c \u0432\u0430\u0436\u043d\u0435\u0435: \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e\u0438\u0441\u043a\u0430, \u0437\u0430\u043d\u044f\u0442\u043e\u0441\u0442\u044c \u043c\u0435\u0441\u0442\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0438\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u0435, \u0440\u0435\u0448\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u043c<\/p>\n<\/li>\n<\/ol>\n<p><a class=\"anchor\" name=\"%D0%BF%D1%80%D0%BE%D1%87%D0%B8%D0%B5-%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D1%8B-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8\" id=\"\u043f\u0440\u043e\u0447\u0438\u0435-\u0441\u043f\u043e\u0441\u043e\u0431\u044b-\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438\"><\/a><\/p>\n<h2>\u041f\u0440\u043e\u0447\u0438\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/h2>\n<p>\u0415\u0441\u0442\u044c \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f \u043d\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0440\u0430\u043d\u0435\u0435, \u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u044f\u0437\u0430\u043d \u043e\u0441\u0432\u0435\u0442\u0438\u0442\u044c \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p><strong>\u041f\u0430\u0440\u0442\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446<\/strong><\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0443 \u0432\u0430\u0441 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438 \u0442\u0430\u043a \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e. \u0418\u043d\u043e\u0433\u0434\u0430 \u0434\u0430\u0436\u0435 \u0442\u0430\u043a\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439, \u0438 \u0442\u043e\u0433\u0434\u0430 \u0443 \u0432\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043e\u043b\u043e\u0441\u0441\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439. <\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u043e\u0438\u0441\u043a\u0430, \u0432 \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0434\u0430\u0442\u044b. \u0411\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c, \u043d\u0435\u0434\u0435\u043b\u044e, \u043c\u0435\u0441\u044f\u0446 \u0438\u043b\u0438 \u0433\u043e\u0434 (\u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043e\u0431\u044a\u0435\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445) \u0432 \u0432\u0430\u0448\u0435\u0439 \u0431\u0430\u0437\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0443\u0434\u0443\u0442 \u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430 \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u043d\u0435\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0441\u043e\u0431\u044b\u0445 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0435\u0439 \u0432 \u043d\u0435\u043c \u043d\u0435\u0442, \u0430 \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043f\u0430\u0440\u044b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u0443\u0434\u043e\u0431\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0442\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u043b\u044f django \u043c\u043e\u0434\u0435\u043b\u0435\u0439.<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/starnavi-team\/django-postgresql-partitioning\" rel=\"noopener noreferrer nofollow\">django-postgresql-partitioning<\/a> (\u0414\u043e django 5.0)<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/django-postgres-extra.readthedocs.io\/en\/master\/table_partitioning.html\" rel=\"noopener noreferrer nofollow\">django-postgres-extra<\/a><\/p>\n<\/li>\n<\/ul>\n<p><strong>JOIN \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u043f\u043e\u043b\u044f\u043c<\/strong><\/p>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, django \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e <code>JOIN<\/code> \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u043f\u043e\u043b\u044f\u043c, \u0445\u043e\u0442\u044f \u0438\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0443\u0436 \u043e\u0447\u0435\u043d\u044c \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442.<\/p>\n<p>\u0412 \u0446\u0435\u043b\u043e\u043c, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043b\u044e\u0431\u043e\u0439 SQL \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u0435\u0442\u043e\u0434 <code>raw<\/code> \u0432\u0430\u0448\u0435\u0433\u043e <code>QuerySet<\/code>, \u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043b\u043e\u0445\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0439.<\/p>\n<p>\u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <a href=\"https:\/\/www.sqlalchemy.org\/\" rel=\"noopener noreferrer nofollow\"><code>SQLAlchemy<\/code><\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0442\u0430\u043a\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0435\u0441\u0442\u044c.<\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c <code>SQLAlchemy<\/code> \u0432 \u0432\u0430\u0448\u0438 django \u043c\u043e\u0434\u0435\u043b\u0438, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"https:\/\/github.com\/aldjemy\/aldjemy\" rel=\"noopener noreferrer nofollow\">Aldjemy<\/a>. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u044f \u0441\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u0430\u0432\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0435\u0439 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0430\u0437, \u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0431\u044b\u043b\u043e \u043e\u043a\u043e\u043b\u043e 6 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043d\u0430\u0437\u0430\u0434, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u043c\u043e\u0433\u0443 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 django.<\/p>\n<p><strong>VACUUM \u0438 ANALYZE<\/strong><\/p>\n<p>\u0415\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u043e \u0432 \u0432\u0430\u0448\u0435\u0439 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0443\u0441\u043e\u0440 \u0432 \u0432\u0438\u0434\u0435 &#171;\u043c\u0435\u0440\u0442\u0432\u044b\u0445&#187; \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439. \u041f\u0440\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445 Postgres, \u043a\u043e\u0440\u0442\u0435\u0436\u0438, \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0435 \u0438\u043b\u0438 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f, \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u041e\u043d\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043d\u0435\u0439, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>VACUUM<\/code>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043d\u0430 \u0432\u0430\u0448\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e, \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0447\u0430\u0441\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f.<\/p>\n<p>\u0412\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>VACUUM ANALYZE<\/code>. \u0414\u0430\u043d\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0438, \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437 \u0432\u0441\u0435\u0445 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446, \u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u043c \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>\u041e\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u0432\u0430\u043c <a href=\"https:\/\/www.postgresql.org\/docs\/current\/sql-vacuum.html\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e<\/a> \u043f\u043e \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0435.<\/p>\n<p><a class=\"anchor\" name=\"%D0%B7%D0%B0%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5\" id=\"\u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\"><\/a><\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041f\u043e\u043d\u0438\u043c\u0430\u044e, \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043e\u0431\u044a\u0435\u043c\u043d\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0445\u043e\u0442\u044f \u0431\u044b \u0432 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443 \u0437\u0430\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c. \u042f \u0445\u043e\u0442\u0435\u043b \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044c \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.<\/p>\n<p>\u0411\u0443\u0434\u0443 \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0434, \u0435\u0441\u043b\u0438 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0443 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043a\u0430\u043a \u043a \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0443 \u0441\u043e \u0432\u0441\u0435\u043c, \u0447\u0442\u043e \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432 \u0432\u043e\u043f\u0440\u043e\u0441\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e \u0434\u043e \u043a\u043e\u043d\u0446\u0430, \u0432\u044b \u0432\u0445\u043e\u0434\u0438\u0442\u0435 \u0432 1% \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u043c\u043e\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439 \u0441 \u0442\u0435\u0433\u043e\u043c &#171;\u0421\u043b\u043e\u0436\u043d\u043e&#187;, \u0430 \u044d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u043e.<\/p>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u043c\u043d\u043e\u0433\u0438\u043c \u0438 \u0432\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u043d\u0430\u0439\u0442\u0438 \u0447\u0442\u043e-\u0442\u043e \u043d\u043e\u0432\u043e\u0435 \u0434\u043b\u044f \u0441\u0435\u0431\u044f.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0430\u0448\u043b\u0438 \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435, \u043f\u0443\u043d\u043a\u0442\u0443\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435, \u0438\u043b\u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0432 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u043c\u043d\u0435 \u0432 \u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043e\u0431\u044a\u0435\u043c\u043d\u044b\u0439, \u0430 \u0433\u043b\u0430\u0437\u0430 \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u0437\u0430\u043c\u044b\u043b\u0438\u043b\u0438\u0441\u044c, \u0431\u0443\u0434\u0443 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u043c \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u0435\u043b\u0435\u043d.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/917710\/\"> https:\/\/habr.com\/ru\/articles\/917710\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440! \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0445\u043e\u0447\u0443 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u043e\u0431\u044b\u0447\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 <a href=\"https:\/\/www.djangoproject.com\/\" rel=\"noopener noreferrer nofollow\">Django<\/a>. \u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c, \u043d\u043e \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u043b\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0431\u0430\u0437\u0435. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/SQL\" rel=\"noopener noreferrer nofollow\">SQL<\/a>, \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0438 \u0432\u044b\u0432\u043e\u0434\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. <\/p>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043a\u0430\u043a \u0434\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u043f\u044b\u0442\u043d\u044b\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0430 django, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445, \u043a\u0442\u043e \u0435\u0449\u0435 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u0441\u044f, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c <a href=\"https:\/\/ru.wikipedia.org\/wiki\/ORM\" rel=\"noopener noreferrer nofollow\">ORM<\/a>.<\/p>\n<p>\u042f \u0432\u0438\u0434\u0435\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0435\u0439 \u043d\u0430 \u0442\u0435\u043c\u0443 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 django, \u043d\u043e \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e, \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0432 \u043d\u0438\u0445 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u043e\u0441\u044c \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043f\u0430\u0440\u0443 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0445\u043e\u0440\u043e\u0448\u043e, \u0435\u0441\u043b\u0438 \u0432 \u043d\u0438\u0445 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u0438\u0441\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u0438\u043b\u0438 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0441\u044f \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u0435\u0442\u043e\u0434. \u0412 \u043e\u0431\u0449\u0435\u043c, \u044f \u043d\u0435 \u0441\u043c\u043e\u0433 \u0431\u0435\u0433\u043b\u044b\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u043d\u0430\u0439\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u043e \u0432\u0441\u0435\u043c, \u0447\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0431\u0435\u0440\u0435\u0448\u044c\u0441\u044f \u0437\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443.<\/p>\n<p>\u0422\u0443\u0442 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043a\u0430\u0441\u0430\u044e\u0442\u0441\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/ORM\" rel=\"noopener noreferrer nofollow\">ORM<\/a> \u043f\u043e \u0442\u0438\u043f\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <a href=\"https:\/\/docs.python.org\/3\/library\/functools.html#functools.cached_property\" rel=\"noopener noreferrer nofollow\"><code>functools.cached_property<\/code><\/a> \u0438\u043b\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043f\u043e\u0434\u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043e\u043a\u043e\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0430 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445, \u0442\u0430\u043a \u043a\u0430\u043a \u0438\u0445 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0434\u0430\u043b\u0435\u043a\u043e \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u0441\u0442\u0430\u0442\u044c\u0438, \u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438 \u043a\u043d\u0438\u0433\u0438.<\/p>\n<p>\u041f\u043e\u043d\u0438\u043c\u0430\u044e, \u0447\u0442\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b, \u043c\u044f\u0433\u043a\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043e\u0431\u044a\u0435\u043c\u043d\u044b\u0439, \u043d\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0431\u0435\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u043c &#171;\u0418\u0442\u043e\u0433\u0438 \u0433\u043b\u0430\u0432\u044b&#187; \u0438\u043b\u0438 \u0441\u0430\u043c\u043e\u043c\u0443 \u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0434\u043b\u044f \u0432\u0430\u0441 \u0432\u043e\u043e\u0431\u0449\u0435 \u0441\u043c\u044b\u0441\u043b \u0447\u0438\u0442\u0430\u0442\u044c \u0442\u043e\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0440\u0430\u0437\u0434\u0435\u043b.<\/p>\n<h2>\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/h2>\n<ul>\n<li>\n<p><a href=\"#%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\" rel=\"noopener noreferrer nofollow\">\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f<\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0-n-%D0%BF%D0%BB%D1%8E%D1%81-1\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 N+1<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0-%D0%B7%D0%B0%D0%BF%D1%80%D0%B0%D1%88%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC%D1%8B%D1%85-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85\" rel=\"noopener noreferrer nofollow\">\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%BF%D0%BE-%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8-%D0%B4%D0%BB%D1%8F-%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2\" rel=\"noopener noreferrer nofollow\">\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%BF%D1%80%D0%BE%D1%87%D0%B8%D0%B5-%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D1%8B-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0447\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%B8%D1%82%D0%BE%D0%B3%D0%B8-%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B-1\" rel=\"noopener noreferrer nofollow\">\u0418\u0442\u043e\u0433\u0438 \u0433\u043b\u0430\u0432\u044b<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#%D0%B1%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D1%8F-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\" rel=\"noopener noreferrer nofollow\">\u0411\u0430\u0437\u043e\u0432\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f<\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%B4%D0%BB%D1%8F-m2m-%D0%B8-o2m-%D1%81%D0%B2%D1%8F%D0%B7%D0%B5%D0%B9\" rel=\"noopener noreferrer nofollow\">\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0434\u043b\u044f M2M \u0438 O2M \u0441\u0432\u044f\u0437\u0435\u0439<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%BF%D0%BE%D0%B4%D0%B2%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5-%D0%BA%D0%B0%D0%BC%D0%BD%D0%B8-%D1%81-%D0%B4%D1%83%D0%B1%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B5%D0%B9\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0435 \u043a\u0430\u043c\u043d\u0438 \u0441 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0435\u0439<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0-%D0%BD%D0%B0-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B9-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B\" rel=\"noopener noreferrer nofollow\">\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0440\u0443\u0433\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F-%D0%B8-%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B5%D0%B9\" rel=\"noopener noreferrer nofollow\">\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%B8%D1%82%D0%BE%D0%B3%D0%B8-%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B-2\" rel=\"noopener noreferrer nofollow\">\u0418\u0442\u043e\u0433\u0438 \u0433\u043b\u0430\u0432\u044b<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#%D0%BF%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D1%83%D1%82%D0%B0%D1%8F-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f<\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#%D1%82%D0%B8%D0%BF%D1%8B-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85\" rel=\"noopener noreferrer nofollow\">\u0422\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%B2%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B2-%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%8B\" rel=\"noopener noreferrer nofollow\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%BE%D0%B2\" rel=\"noopener noreferrer nofollow\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D1%8B-%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%BE%D0%B2-%D0%B8-%D0%B8%D1%85-%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%BE\" rel=\"noopener noreferrer nofollow\">\u0420\u0430\u0437\u043c\u0435\u0440\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0438 \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%BE%D0%B2\" rel=\"noopener noreferrer nofollow\">\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%B8%D1%82%D0%BE%D0%B3%D0%B8-%D0%B3%D0%BB%D0%B0%D0%B2%D1%8B-3\" rel=\"noopener noreferrer nofollow\">\u0418\u0442\u043e\u0433\u0438 \u0433\u043b\u0430\u0432\u044b<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#%D0%BF%D1%80%D0%BE%D1%87%D0%B8%D0%B5-%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D1%8B-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0447\u0438\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%B7%D0%B0%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\" id=\"\u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f-\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f\">\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f&#187;><\/a><\/p>\n<h2>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f<\/h2>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u0441 \u0442\u043e\u0433\u043e \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u043d\u0430\u0442\u044c \u0432\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0435 django orm, \u043d\u043e \u0441\u043f\u0435\u0440\u0432\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432.<\/p>\n<p>\u042f \u0441\u043e\u0437\u0434\u0430\u043b \u0447\u0438\u0441\u0442\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 django \u0438 \u0432 \u043d\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u043b 3 \u043c\u043e\u0434\u0443\u043b\u044f <code>minimum<\/code> \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0433\u043b\u0430\u0432\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 <code>middle<\/code> \u0438 <code>advanced<\/code> \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0433\u043b\u0430\u0432.<\/p>\n<p>\u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code>Django 5.2.2<\/code> \u0438 <code>PostgreSQL 17.5<\/code>.<\/p>\n<details class=\"spoiler\">\n<summary>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">asgiref==3.8.1 asttokens==3.0.0 decorator==5.2.1 Django==5.2.2 django-stubs==5.2.0 django-stubs-ext==5.2.0 executing==2.2.0 factory_boy==3.3.3 Faker==37.3.0 ipython==9.2.0 ipython_pygments_lexers==1.1.1 jedi==0.19.2 matplotlib-inline==0.1.7 parso==0.8.4 pexpect==4.9.0 prompt_toolkit==3.0.51 psycopg2-binary==2.9.10 ptyprocess==0.7.0 pure_eval==0.2.3 Pygments==2.19.1 Pympler==1.1 sqlparse==0.5.3 stack-data==0.6.3 traitlets==5.14.3 types-PyYAML==6.0.12.20250516 typing_extensions==4.14.0 tzdata==2025.2 wcwidth==0.2.13<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0423\u0442\u0438\u043b\u0438\u0442\u044b \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 sql, \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0438 \u043f\u043b\u0430\u043d\u0430 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">import sqlparse from django.db import connection from django.db import reset_queries from django.db.models import QuerySet from pympler.asizeof import asizeof   # \u041d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0430\u0440\u0443 \u0443\u0442\u0438\u043b\u0438\u0442 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f def get_size(obj):     # \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430     size_bytes = asizeof(obj)     size_kb = size_bytes \/ 1024     size_mb = size_kb \/ 1024     return f\"{size_mb:.2f} MB, {size_kb:.2f} KB\"  # \u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c # SQL \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044b\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f # \u043a\u043e\u0434\u0430 \u0432 \u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 class CheckQueries:     _count_only: bool     _time_only: bool          # \u041d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u043e\u043c     def __init__(self, count_only=False, time_only=False):         # \u041d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432         reset_queries()         self._count_only = count_only         self._time_only = time_only          # \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432     def __enter__(self, count_only=False):         reset_queries()      def __exit__(self, exc_type, exc_val, exc_tb):         if self._count_only:             print(f\"\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432: {len(connection.queries)}\")             return                  # \u041f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c \u0438 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u043c          # \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0438\u0445         for number, query in enumerate(connection.queries):             if self._time_only:                 print(f\"\u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: {query['time']} s\")                 continue              print(f\"SQL \u0437\u0430\u043f\u0440\u043e\u0441 {number + 1}\")             # \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 sql             print(sqlparse.format(                 query['sql'],                  reindent=True,                  keyword_case='upper'             ))             print(f\"\u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: {query['time']} s\")             print(\"-\" * 20)  # \u0424\u0443\u043d\u043a\u0446\u0438\u044f, \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u043f\u043b\u0430\u043d\u0430 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u0438 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 # \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 def explain(queryset: QuerySet):     print(queryset.explain(analyze=True)) <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043d\u0430\u043a\u0438\u0434\u0430\u0435\u043c \u043f\u0430\u0440\u0443 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 django.<\/p>\n<pre><code class=\"python\">from django.db import models   # \u041c\u043e\u0434\u0435\u043b\u044c, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f class Bar(models.Model):     short_field = models.CharField(max_length=64)     long_field = models.TextField(max_length=4096)     ...   # \u041c\u043e\u0434\u0435\u043b\u044c, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u043a\u0430\u043a \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f, \u0442\u0430\u043a \u0438 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0442\u0430\u0431\u043b\u0438\u0446\u044b Bar class Foo(models.Model):     short_field = models.CharField(max_length=64)     long_field = models.TextField(max_length=4096)     ...     bar = models.ForeignKey(Bar, on_delete=models.CASCADE)<\/code><\/pre>\n<p>\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435, \u0434\u0443\u043c\u0430\u044e, \u043d\u0430\u043c \u0445\u0432\u0430\u0442\u0438\u0442 \u043f\u043e 10 000 \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\"># \u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0444\u044d\u0439\u043a\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 from django.db import transaction from factory.fuzzy import FuzzyText  from minimum.models import Bar, Foo  # \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 long_text_generator = FuzzyText(length=4096) short_text_generator = FuzzyText(length=64)  def get_long_text():     return long_text_generator.fuzz()  def get_short_text():     return short_text_generator.fuzz()   # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0438 Bar def create_bars(count):     # \u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0434\u043b\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u0430 Bar     bars = []     for _ in range(count):         # \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440         bars.append(Bar(             # \u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0440\u0430\u043d\u0434\u043e\u043c\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438             short_field=get_short_text(),             long_field=get_long_text(),         ))      return Bar.objects.bulk_create(bars, batch_size=1000)  # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0438 Foo @transaction.atomic def create_foos(count):     # \u0417\u0434\u0435\u0441\u044c \u043b\u043e\u0433\u0438\u043a\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430 create_bars     bars = create_bars(count)     foos = []     for bar in bars:         foos.append(Foo(             # \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430             bar_id=bar.id,             short_field=get_short_text(),             long_field=get_long_text(),         ))      return Foo.objects.bulk_create(foos, batch_size=1000)  # \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u043e 10 000 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 Foo \u0438 Bar \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 create_foos(10_000)<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432<\/p>\n<p><a class=\"anchor\" name=\"%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0-n-%D0%BF%D0%BB%D1%8E%D1%81-1\" id=\"\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430-n-\u043f\u043b\u044e\u0441-1\">\u043f\u043b\u044e\u0441-1&#8243;><\/a><\/p>\n<h3>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 N + 1<\/h3>\n<p>\u0422\u0443\u0442 \u0445\u043e\u0447\u0443 \u043f\u043b\u0430\u0432\u043d\u043e \u043f\u043e\u0434\u0432\u0435\u0441\u0442\u0438 \u043a \u0441\u0430\u043c\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0435 \u0441\u0443\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435.<\/p>\n<pre><code class=\"python\">from minimum.models import Foo  # \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u043f\u0435\u0440\u0432\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b Foo with CheckQueries():     # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b Foo     foo = Foo.objects.first()     # \u0410 \u0442\u0430\u043a\u0436\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u043a\u043e\u0433\u043e \u043b\u0438\u0431\u043e \u043f\u043e\u043b\u044f foo.bar.*     bar_short_field = foo.bar.short_field<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0417\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u043e 2 SQL \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SQL \u0437\u0430\u043f\u0440\u043e\u0441 1 (\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b Foo) SELECT \"minimum_foo\".\"id\",        \"minimum_foo\".\"short_field\",        \"minimum_foo\".\"long_field\",        \"minimum_foo\".\"bar_id\" FROM \"minimum_foo\" ORDER BY \"minimum_foo\".\"id\" ASC LIMIT 1 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000s -------------------- SQL \u0437\u0430\u043f\u0440\u043e\u0441 2 (\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b Bar) SELECT \"minimum_bar\".\"id\",        \"minimum_bar\".\"short_field\",        \"minimum_bar\".\"long_field\" FROM \"minimum_bar\" WHERE \"minimum_bar\".\"id\" = 20001 LIMIT 21 \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: 0.000s<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e django \u043d\u0435 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446, \u0438, \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0443, \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0449\u0435 \u043d\u0435 \u0431\u044b\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b, django \u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u041f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u0443\u0436\u0435 \u0437\u0430\u043f\u0440\u043e\u0448\u0435\u043d\u043d\u043e\u043c\u0443 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0443, \u043d\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0443\u0434\u043e\u0431\u043d\u044b\u043c, \u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0435\u0433\u043e \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u043e, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c, \u0447\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u0430\u0441\u043d\u0430 \u0434\u0430\u043d\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c.<\/p>\n<pre><code class=\"python\"># \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b Foo with CheckQueries(count_only=True):     # \u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0441\u0435 \u0435\u0449\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d.     # \u0427\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441, QuerySet \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0446\u0435\u043d\u0438\u0442\u044c.     # \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438:     #   1) \u041d\u0430\u0447\u0430\u0442\u044c \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0443 QuerySet     #   2) \u041f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0432\u044b\u0437\u043e\u0432 list, \u0447\u0442\u043e \u043f\u043e \u0441\u0443\u0442\u0438 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435,     #   3) \u041f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0432\u044b\u0437\u043e\u0432 bool (\u043d\u043e \u0442\u0443\u0442 \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b).     # \u0412 \u0446\u0435\u043b\u043e\u043c, \u043e\u0446\u0435\u043d\u0438\u0442\u044c QuerySet \u043c\u043e\u0436\u043d\u043e \u0438 \u0438\u043d\u0430\u0447\u0435,     # \u043d\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.     queryset = Foo.objects.all()     # \u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 QuerySet \u0431\u0443\u0434\u0435\u0442 \u043e\u0446\u0435\u043d\u0435\u043d \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0437\u043e\u0432\u0430     # \u043c\u0435\u0442\u043e\u0434\u0430 __iter__ \u043a\u043b\u0430\u0441\u0441\u0430 QuerySet, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0441\u0440\u0435\u0437     # [:1000] \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442 LIMIT \u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0443     for foo in queryset[:1000]: # SQL \u0437\u0430\u043f\u0440\u043e\u0441 1         # \u0410 \u0442\u0430\u043a\u0436\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u043a\u043e\u0433\u043e \u043b\u0438\u0431\u043e \u043f\u043e\u043b\u044f foo.bar.*         bar_short_field = foo.bar.short_field # SQL \u0437\u0430\u043f\u0440\u043e\u0441 2 - 1001  # \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432: 1001<\/code><\/pre>\n<p><em>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u043e\u0446\u0435\u043d\u043a\u0443 <\/em><code><em>QuerySet<\/em><\/code><em> \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 <\/em><a href=\"https:\/\/docs.djangoproject.com\/en\/5.2\/ref\/models\/querysets\/#when-querysets-are-evaluated\" rel=\"noopener noreferrer nofollow\"><em>\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/em><\/a><em>. <\/em><\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 1001 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 1000 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043e\u0431\u044b\u0447\u043d\u043e \u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <strong>&#171;\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 N + 1&#187;<\/strong>.<\/p>\n<p>\u041c\u044b \u0435\u0434\u0438\u043d\u043e\u0436\u0434\u044b \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b <code>Foo<\/code>, \u043d\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0435\u0449\u0435 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438 <code>Bar<\/code>. <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c <code>INNER JOIN<\/code> \u0442\u0430\u0431\u043b\u0438\u0446\u044b <code>Bar<\/code>. \u0412 django \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 <code>QuerySet.select_related<\/code>. <\/p>\n<pre><code class=\"python\">with CheckQueries():     # \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c select_related, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0443     # \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-463197","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/463197","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=463197"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/463197\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=463197"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=463197"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=463197"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}