distinct的用法:
select distinct expression[,expression...] from tables [where conditions];
在使用distinct的過程中主要注意一下幾點:
- 在對字段進行去重的時候,要保證distinct在所有字段的最前面
- 如果distinct關鍵字后面有多個字段時,則會對多個字段進行組合去重,只有多個字段組合起來的值是相等的才會被去重
distinct的原理:
distinct進行去重的主要原理是通過先對要進行去重的數據進行分組操作,然后從分組后的每組數據中去一條返回給客戶端,在這個分組的過程可能會出現兩種不同的情況:
distinct 依賴的字段全部包含索引:
該情況mysql直接通過操作索引對滿足條件的數據進行分組,然后從分組后的每組數據中去一條數據。
distinct 依賴的字段未全部包含索引:
該情況由於索引不能滿足整個去重分組的過程,所以需要用到臨時表,mysql首先需要將滿足條件的數據放到臨時表中,然后在臨時表中對該部分數據進行分組,然后從臨時表中每個分組的數據中去一條數據,在臨時表中進行分組的過程中不會對數據進行排序。