SQL優化的具體操作

2021-09-28 07:39:07 字數 1565 閱讀 5404

1、在表中建立索引,優先考慮where、group by使用到的字段。

2、盡量避免使用select *,返回無用的字段會降低查詢效率。如下:

select * from t 

優化方式:使用具體的字段代替*,只返回使用到的字段。

3、盡量避免使用in 和not in,會導致資料庫引擎放棄索引進行全表掃瞄。如下:

select * from t where id in (2,3)

select * from t1 where username in (select username from t2)

優化方式:如果是連續數值,可以用between代替。如下:

select * from t where id between 2 and 3

如果是子查詢,可以用exists代替。如下:

select * from t1 where exists (select * from t2 where t1.username = t2.username)

4、盡量避免使用or,會導致資料庫引擎放棄索引進行全表掃瞄。如下:

select * from t where id = 1 or id = 3

優化方式:可以用union代替or。如下:

select * from t where id = 1

union

select * from t where id = 3

(ps:如果or兩邊的字段是同乙個,如例子中這樣。貌似兩種方式效率差不多,即使union掃瞄的是索引,or掃瞄的是全表)

5、盡量避免在字段開頭模糊查詢,會導致資料庫引擎放棄索引進行全表掃瞄。如下:

select * from t where username like '%li%'

優化方式:盡量在字段後面使用模糊查詢。如下:

select * from t where username like 'li%'

6、盡量避免進行null值的判斷,會導致資料庫引擎放棄索引進行全表掃瞄。如下:

select * from t where score is null

優化方式:可以給字段新增預設值0,對0值進行判斷。如下:

select * from t where score = 0

7、盡量避免在where條件中等號的左側進行表示式、函式操作,會導致資料庫引擎放棄索引進行全表掃瞄。如下:

select * from t2 where score/10 = 9

select * from t2 where substr(username,1,2) = 'li'

優化方式:可以將表示式、函式操作移動到等號右側。如下:

select * from t2 where score = 10*9

select * from t2 where username like 'li%'

8、當資料量大時,避免使用where 1=1的條件。通常為了方便拼裝查詢條件,我們會預設使用該條件,資料庫引擎會放棄索引進行全表掃瞄。如下:

select * from t where 1=1

優化方式:用**拼裝sql時進行判斷,沒where加where,有where加and。

Spring 具體操作

1.建立物件 ioc建立物件的方式1.預設使用無參構造建立物件 2.在呼叫 getbean 方法時,配置檔案內的所有物件都被建立 使用有參構造建立物件 xmlns xmlns xsi xsi schemalocation user class com.liye.pojo.user name age ...

MFC ListControl 具體操作詳細用法

1 listcontrol初始化 listcontrol初始化 新增在虛函式cdlg oninitdialog 中 m mylist.modifystyle 0l,lvs showselalways dword dwstyle m mylist.getextendedstyle dwstyle lv...

github fork工作(具體操作)

更新於20201110 git add remote upstream url.git 遠端庫,公共開發倉庫 git add remote localhost url.git 本地庫,自己倉庫切換到轉殖的資料夾 cd 在本地建立乙個新的分支,用來提交 git checkout b cq b第一次使用...