因為現在面試經常需要問的需要sql優化,問的具體操作步驟時候的常見做法,所以網上總結這些操作步驟:
sql優化的具體操作:
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。
mysql sql優化面試題 SQL優化 面試題
因為現在面試經常需要問的需要sql優化,問的具體操作步驟時候的常見做法,所以網上總結這些操作步驟 sql優化的具體操作 1 在表中建立索引,優先考慮where group by使用到的字段。2 盡量避免使用select 返回無用的字段會降低查詢效率。如下 select from t 優化方式 使用具...
常見的SQL優化面試題
1.在表中建立索引,優先考慮 where group by 使用到的字段 2.查詢時盡量避免使用select 只查詢需要用到的字段 3.避免在where子句中使用關鍵字兩邊都是 的模糊查詢,盡量在關鍵字後使用模糊查詢 4.盡量避免在where子句中使用in 和not in 優化 能使用between...
常見的SQL優化面試題
1.在表中建立索引,優先考慮where.group by使用到的字段。2.查詢條件中,一定不要使用select 因為會返回過多無用的字段會降低查詢效率。應該使用具體的字段代替 只返回使用到的字段。3.不要在where條件中使用左右兩邊都是 的like模糊查詢,如 select from t orde...