【发布时间】:2017-02-15 03:12:37
【问题描述】:
请问,如何提高使用 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 可以接受混合文本、图像、表格等。这个富文本框的全部内容被写入 DB(即“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代码
谢谢,
【问题讨论】:
-
请告诉我们
SELECT和EXPLAIN SELECT ... -
@Rick,我已经编辑了我的问题以包含您的建议。谢谢。
-
如果没有
ORDER BY,您希望获得哪 20 行?你可以得到 any 20. -
使用
BLOB而不是TEXT CHARACTER SET utf8的一些原因? -
如果您将此
_question表映射到Java 类,请显示它。
标签: mysql performance jpa ejb blob