gpt4 book ai didi

mysql - 在包含 BLOB 字段的数据库表上选择查询非常慢

转载 作者:行者123 更新时间:2023-11-29 11:15:01 24 4
gpt4 key购买 nike

请问如何提高使用 BLOB 字段的选择查询的速度。参见下面的表结构;

CREATE TABLE IF NOT EXISTS `mydb`.`question_` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`question_text` BLOB(90000) NOT NULL,
`comprehension_id` INT UNSIGNED NOT NULL DEFAULT '0',
`MCQ` TINYINT(1) NOT NULL DEFAULT '0',
`subject__id` INT UNSIGNED NOT NULL,
`col1` INT NULL,
`col2` INT NULL,
`col3` INT NULL,
`col4` INT NULL,
`col5` INT NULL,
`col6` INT NULL,
`col7` INT NULL,
PRIMARY KEY (`id`),
INDEX `fk_question__subject_1_idx` (`subject__id` ASC),
CONSTRAINT `fk_question__subject_1`
FOREIGN KEY (`subject__id`)
REFERENCES `mydb`.`subject_` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB;

我需要 BLOB 字段,以便列“question_text”可以容纳图像,我知道将图像文件链接存储到数据库并将图像文件保存到磁盘的替代方案可能会更好,但我不是这样做是因为我的应用程序的性质很特殊。

使用 BLOB 字段是我的应用程序的首选方式,因为我的用户会定期创建和更新“问题”,而不太了解图像上传、图像 URL 等技术细节的用户宁愿复制图像无论它在哪里,粘贴到我的应用程序提供的富文本框(例如 CKEditor)中,然后继续输入 - 就像使用 MS-Word 一样。 CKEditor 可以接受混合文本、图像、表格等。该富文本框的全部内容都写入数据库(即“question_text”列)。因此需要 BLOB 字段。

但我在这里面临的挑战是,在后端管理问题时,问题页面需要更长的时间来加载。

我怎样才能提高速度,或者我应该做什么来提高速度。

我的应用程序是基于 javaee 堆栈(JPA、EJB、JSP、Servlet、Glassfish)构建的,下面是我用来显示问题列表的选择查询...

SELECT  q.id, CONVERT(q.question_text USING UTF8), q.subject__id,
q.comprehension_id, q.MCQ
FROM question_ q
WHERE q.subject__id = 13
limit 1, 20

您还可以在 https://www.dropbox.com/s/on2wv92c71owx2d/Question.java?dl=0 上查看通过 ORM 映射到 Question_table 的 Question.java 代码

谢谢

最佳答案

感谢您的所有努力。

错误实际上并非来自 blob 字段,而是来自显示 blob 字段内容的富文本编辑器 (CKEditor)。我意识到 CKEditor 是一个繁重的 javascript 库(压缩模式下超过 1000 行,未压缩模式下超过 22000 行),并且在显示每个问题(以及每个问题下的选项/选择)时我无法使用 ajax 并延迟加载它。

假设我希望页面显示 100 个问题,并且每个问题至少包含 4 个选项/选择,这意味着对 CKEditor 的 100x4 (400) 次调用。

因此,我修改了代码,仅在需要时加载 CKeditor,这样编辑器中从 blob 字段获取的内容也仅在需要时加载

关于mysql - 在包含 BLOB 字段的数据库表上选择查询非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39894892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com