select查询在包含blob字段的db表上非常慢

q3qa4bjr  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(436)

请问,我如何提高我的选择与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\u text”列可以容纳图像,我知道我可以更好地将图像文件链接存储到db,并将图像文件保存到磁盘,但我不这样做,因为我的应用程序的性质是独特的。
使用blob字段是我的应用程序的首选方式,因为我的用户会定期创建和更新“问题”,而我的用户对图片上传、图片url等技术不太熟悉,他们宁愿将图片复制到任何地方,并粘贴到我的应用程序提供的富文本框(例如ckeditor)中,继续打字-就像ms word一样。ckeditor可以接受混合文本、图像、表格等。此富文本框的全部内容将写入db(即;“问题文本”列)。因此需要一个blob字段。
但我在这里面临的挑战是,在后端管理问题时,问题页需要较长时间才能加载。
我怎样才能提高速度,或者我应该做些什么来提高速度。
我的应用程序构建在javaee堆栈(jpa、ejb、jsp、servlet、glassfish)上,下面是我用来显示问题列表的select查询。。。

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

您还可以查看question.java代码,该代码通过ormMap到question\表https://www.dropbox.com/s/on2wv92c71owx2d/question.java?dl=0
谢谢,

w80xi6nr

w80xi6nr1#

谢谢你的努力。
错误实际上不是来自blob字段,而是来自显示blob字段内容的富文本编辑器(ckeditor)。我意识到ckeditor是一个繁重的javascript库(压缩模式下有1000多行,未压缩模式下有22000多行),在显示每个问题(以及每个问题下的选项/选项)时,我没有使用ajax并延迟加载它。
假设我希望页面显示100个问题,并且每个问题至少包含4个选项/选项,这意味着100x4(400)个对ckeditor的调用。
因此,我重新编写了代码,以便仅在需要时加载ckeditor,这样,编辑器中从blob字段获取的内容也可以仅在需要时加载

相关问题