2016-10-06 17 views
0

請問,如何提高BLOB字段的查詢速度。見下面的表結構;我的數據庫表中包含一個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 

你可以也有觀點認爲這是通過映射到ORM上question_table https://www.dropbox.com/s/on2wv92c71owx2d/Question.java?dl=0

感謝Question.java代碼,

+0

請向我們展示時只加載'選擇'和'EXPLAIN SELECT ...' –

+0

@Rick,我編輯了我的問題以包含您的建議。謝謝。 –

+0

沒有'ORDER BY',你希望得到20行?你可以得到_any_ 20. –

回答

1

感謝你的努力。

這些故障並非真正來自blob字段,而是來自顯示blob字段內容的富文本編輯器(CKEditor)。我意識到CKEditor是一個沉重的JavaScript庫(在壓縮模式下超過1000行,在未壓縮模式下超過22000行),並且在顯示每個問題(以及每個問題下的選項/選項)時,我沒有ajax和lazily加載它。

比方說,我希望頁面顯示100個問題,每個問題至少包含4個選項/選項,這將意味着對CKEditor的100x4(400)調用。

所以我造成返工我的代碼加載CKEDITOR只在需要時和方式是從BLOB字段得到編輯器中的內容也得到需要

相關問題