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

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

请问,我如何提高我的选择与blob字段查询的速度。见下表结构;

  1. CREATE TABLE IF NOT EXISTS `mydb`.`question_` (
  2. `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `question_text` BLOB(90000) NOT NULL,
  4. `comprehension_id` INT UNSIGNED NOT NULL DEFAULT '0',
  5. `MCQ` TINYINT(1) NOT NULL DEFAULT '0',
  6. `subject__id` INT UNSIGNED NOT NULL,
  7. `col1` INT NULL,
  8. `col2` INT NULL,
  9. `col3` INT NULL,
  10. `col4` INT NULL,
  11. `col5` INT NULL,
  12. `col6` INT NULL,
  13. `col7` INT NULL,
  14. PRIMARY KEY (`id`),
  15. INDEX `fk_question__subject_1_idx` (`subject__id` ASC),
  16. CONSTRAINT `fk_question__subject_1`
  17. FOREIGN KEY (`subject__id`)
  18. REFERENCES `mydb`.`subject_` (`id`)
  19. ON DELETE CASCADE
  20. ON UPDATE CASCADE)
  21. ENGINE = InnoDB;

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

  1. SELECT q.id, CONVERT(q.question_text USING UTF8), q.subject__id,
  2. q.comprehension_id, q.MCQ
  3. FROM question_ q
  4. WHERE q.subject__id = 13
  5. 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字段获取的内容也可以仅在需要时加载

相关问题