我有一个查询,这非常慢。它使用两个过滤器。
db_author = session.query(Comment_Post_Author)\
.options(load_only("author"))\
.filter(Comment.cat_tag == config['cat_tag'], Comment.platform == config['platform'])\
.all()
查询需要 40秒才能执行。在只有1000个条目的db表上。
SQL看起来像这样:
SELECT sb_comments_post_author.id AS sb_comments_post_author_id, sb_comments_post_author.author AS sb_comments_post_author_author
FROM sb_comments_post_author, sb_comments
WHERE sb_comments.cat_tag = %(cat_tag_1)s AND sb_comments.platform = %(platform_1)s
我不知道它是如何运作的,但我想念我输入的值。" cat_tag_1"应该是一个类别而不是"%(cat_tag_1)s" ?
数据库表设置:
CREATE TABLE IF NOT EXISTS `sb_comments_post_author` (
`id` int(10) unsigned NOT NULL,
`author` text COLLATE utf8mb4_unicode_ci,
`platform` tinytext COLLATE utf8mb4_unicode_ci,
`cat_tag` tinytext COLLATE utf8mb4_unicode_ci,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=InnoDB AUTO_INCREMENT=2453 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ALTER TABLE `sb_comments_post_author`
ADD PRIMARY KEY (`id`), ADD KEY `Index_cat_tag` (`cat_tag`(10)), ADD KEY `Index_platform` (`platform`(10));