本文提要

最近寫的幾篇文章都是關(guān)于數(shù)據(jù)層優(yōu)化方面的,這幾天也在想還有哪些地方可以優(yōu)化改進,結(jié)合日志和項目代碼發(fā)現(xiàn),關(guān)于數(shù)據(jù)層的優(yōu)化,還是有幾個方面可以繼續(xù)修改的,代碼方面,整合了druid數(shù)據(jù)源也開啟了sql監(jiān)控等,修改和規(guī)范了變量的命名方式,建表時的命名方式也做了修改,不過做的這些還不夠,優(yōu)化這件事真是一個長期和自覺的過程,mapper文件中的sql語句,依然不是十分的符合規(guī)范,有繼續(xù)優(yōu)化的必要,數(shù)據(jù)庫中表的結(jié)構(gòu)也需要繼續(xù)優(yōu)化。

前一篇文章主要講了慢sql的整理,以及explain關(guān)鍵字在優(yōu)化查詢語句中的作用,也對sql做了一點小改動,但是修改的力度不是特別大,這一篇會稍微補充一下前一篇中關(guān)于索引的知識點,以及使用索引對查詢語句進行優(yōu)化。本文依然是代碼優(yōu)化和sql優(yōu)化,主要還是講一下索引及案例,前一篇文章較為簡略,為了彌補這個懶惰造成的結(jié)果,這篇文章就詳細一些。

表結(jié)構(gòu)優(yōu)化

建表語句規(guī)范,對原來的表結(jié)構(gòu)重新做了一下修改,主要有:

  • 字段非空修改

  • 添加字段注釋

  • 添加索引(下面一個段落細講)

這里只貼出部分修改后的代碼,其余的自行通過github更新:

CREATE TABLE `ssm_article` (  `id` int(4) NOT NULL AUTO_INCREMENT COMMENT '主鍵',  `article_title` varchar(100) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '文章標題',  `article_create_date` varchar(50) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '創(chuàng)建時間',  `article_content` text COLLATE utf8_bin NOT NULL COMMENT '文章內(nèi)容',  `is_top` int(4) NOT NULL DEFAULT '0' COMMENT '是否置頂,1為置頂,默認為0',  `add_name` varchar(50) COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT '添加人',
  PRIMARY KEY (`id`)
) ENGINE=innodb DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

NOT NULL:防止索引失效,對表中一個列添加了索引的話,如果有記錄為NULL,則查詢時不會使用該索引。

表注釋:同代碼注釋一樣,可以幫助開發(fā)人員快速理解的建表的含義,但是同項目中的代碼又不一樣,沒有注釋,代碼看久了總會理解其中的邏輯和功能,但是表字段,如果不懂就真的只能靠猜了。添加表注釋就是為了大家都能理解字段的意思及建表意圖,不要太相信自己的記憶力,它是比不了白紙黑字的,時間久了總會淡忘一些,如果連自己都忘了真的是搞笑了,因此注釋的添加也是極其必要的,有些標示類型字段也是需要詳細解釋的,不同的值分別代表什么意思,如果不在注釋中約定好,只靠口頭來傳達是很容易出現(xiàn)差錯的,注釋就是為了減少溝通成本,