1. 程式人生 > >優化查詢速度的幾點經驗

優化查詢速度的幾點經驗

根據個人工作經驗,歸納出幾點優化查詢資料的幾點簡單的思路,供大家參考,資料庫為mysql,開發框架為Spring+SpringMVC+hibernate。

一.合理使用索引

      為經常作為查詢條件的欄位新增建立一個數據庫索引,建立資料庫索引的語句為:create index index_name on table_name(colum_name);

      建立索引要注意一下幾點:

      1.索引會影響增刪改的速度,對於經常需要增刪改的欄位慎用索引。

      2.索引對於基數小的欄位作用不大,比如性別,只有男女兩種,基數很小。

      3.索引通過建立一個B+樹的資料結構來增加查詢速度,會佔用一定的儲存空間。

二.對sql語句進行優化

      1.儘量少使用select * from 而是需要查詢哪幾列的資料就查出來哪幾列的資料,比如select colum1,colum2,colum3 from。

      2.用NOT  EXISTS 代替NOT IN。

      3.避免在索引上使用IS NULL 或者IS NOT  NULL,用a>0等代替。

      4.使用like ‘%XXX%’或‘%XXX’不走索引,只有‘%XXX’走索引。

三.使用hibernate快取機制

       hibernate有快取的功能,分為一級快取和二級快取,一級快取是session級別的,二級快取是sessionFactory級別的,一級快取預設開啟,二級快取需要手動配置,具體配解釋見我的其他博文。

四,使用hibernate延遲載入的功能

      延遲載入就是指可以將不需要立馬使用的實體延遲加載出來,使用它的時候再加載出來。具體解釋見我的其他博文。

五.將hibernate中的hql語句改成sql語句

      hibernate支援hql語句和sql語句的查詢,使用sql語句查詢可以避免載入一些不必要的相關實體,和使用hibernate的延遲載入機制有異曲同工之妙。

四.使用頁面快取

     頁面快取預設允許,配置方法如下:

 方法一:在<head>標籤裡增加如下meta標籤。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=8">
<meta http-equiv="Expires" content="0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Cache" content="no-cache">

 方法二:在java程式碼中增加如下程式碼。

response.setHeader("Cache-Control","no-cache"); 
response.setHeader("Pragma","no-cache"); 
response.setDateHeader("Expires",0);