SQL總結

一、SQL優化

  • 盡量用到索引
  • 盡量不要使用distinct語法
  • 列裁剪,只有需要用到的列才進行輸出
  • 盡早過濾數據,減少每個階段的數據量
  • join時,盡量把小表放在前面,大表放后面
  • 盡量不要用order by

1、盡量用到索引

select * from character_login 
應改成:
select * from character_login where dt='20210312'

select a.* from a join b
on a.dt='20210312'  and a.dt=b.dt and a.id=b.id
"a.dt=b.dt"是關聯條件,索引沒有起作用。應改成:
select a.* from a join b
on a.dt='20210312'  and b.dt='20210312' and a.id=b.id

2、盡量不使用distinct(尤其是大數據量下)

因為Distinct函數都會導致對最終結果集完成一次排序,因此,這就成為成本最昂貴的排序之一.

select distinct id from character_login where dt='20210312'
應改成:
select id from character_login 
where dt='20210312' 
group by id


select game_id,count(distinct character_id) 
from character_login 
where dt='20210312' 
group by game_id
應改成:
select game_id,count(1) 
from 
(
    select game_id,character_id
    from character_login 
    where dt='20210312' 
    group by game_id,character_id
)
group by game_id

3、列裁剪

查詢時只有需要用到的列才進行輸出。
原因:
在大數據量多字段的數據表中,如果使用 SELECT * 方式去查詢數據,會造成很多無效數據的處理,會占用程序資源,造成資源的浪費。

4、謂詞下推,盡早進行數據過濾

5、Join順序

小表在前,大表在后

6、如無必要,別用order by(尤其大數據量下)

小表在前,大表在后

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 目錄 簡介 在Android中存儲數據有時會用到數據庫,Android給我們提供了 一系列的API來操作數據庫,非...
    慕涵盛華閱讀 1,035評論 1 2
  • 一.查詢部分(s) 1.1 select關鍵字 作用:檢索“列” 注意:1.select后面的列可以起別名(查詢的...
    吃西瓜的的小青年閱讀 864評論 0 0
  • 前言 --下文為個人在學習和工作中的簡單總結,供個人參考用,如有問題和建議歡迎指正和指導! 正文索引 一、sql優...
    精華_Wjinghua閱讀 401評論 0 1
  • 一、sql中的幾個重要的概念1.數據定義語言:DDL(Data Definition Language),用來定義...
    是淼子啊閱讀 253評論 0 0
  • 作者:停留的風原文地址:http://www.cnblogs.com/yank/p/3672478.html SQ...
    IT程序獅閱讀 1,161評論 0 8