利用Mysql中的 的聚合函數(shù) count(*) 可以實現(xiàn)這個功能,例如需要查詢data表中name出現(xiàn)次數(shù)最多的記錄,可以先按照group by name分組,用count算出分組里的條數(shù),再按照count排序:
成都創(chuàng)新互聯(lián)主要從事成都做網(wǎng)站、網(wǎng)站設(shè)計、外貿(mào)營銷網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)牡丹,10年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
select name,count(*) from data group by name order by count(*) DESC limit 1
不加limit限制將返回按照name重復(fù)次數(shù)排列的數(shù)據(jù)
標(biāo)簽:count(*), mysql這個你要用存儲過程了吧,吧三次查詢的結(jié)果匯聚到一張表中,然后再對一張表求和
假設(shè)ID是表的關(guān)鍵字段,TopicID是回復(fù)所屬的主題ID字段,其中1是變化的值,那么可以使用以下語句就可以了select count(ID) from bbs where topicID=1
在innoDB中,有兩大索引類,分別是
執(zhí)行上述語句,執(zhí)行過程如下圖
從圖中,我們可以看出,掃了兩個索引樹
(1)先從普通索引name找到lisi
(2)再根據(jù)主鍵值9,再在聚集索引中找到行記錄。
這就是回表查詢,先在普通索引中找到主鍵值,再在聚集索引中找到行記錄。
很顯然,在一棵索引樹上就能獲取SQL所需的所有列數(shù)據(jù)的,就是索引覆蓋。
如下語句
很顯然,我們可以直接在name索引上直接找到id,name,不用再去回表。
而且我們通過explain的extra屬性也能觀察到
像我們開頭的SQL語句
我們只需要在name索引中再加個sex,name(name,sex),這樣變成了聯(lián)合索引,也是索引覆蓋。
??聚集索引:數(shù)據(jù)行的物理順序與列值(一般是主鍵的那一列)的邏輯順序相同,一個表中只能擁有一個聚集索引。 葉子結(jié)點存儲索引和行記錄,聚簇索引查詢會很快,因為可以直接定位到行記錄。
??非聚集索引:該索引中索引的邏輯順序與磁盤上行的物理存儲順序不同,一個表中可以擁有多個非聚集索引。 葉子節(jié)點存儲聚簇索引值(主鍵id),需要掃碼兩遍索引樹,先通過普通索引定位到主鍵值id,再通過聚集索引定位到行記錄。
??回表查詢可以理解為普通索引的查詢,先定位主鍵值,再定位行記錄,它的性能較掃一遍索引樹更低。
??索引覆蓋,即將查詢sql中的字段添加到聯(lián)合索引里面,只要保證查詢語句里面的字段都在索引文件中,就無需進(jìn)行回表查詢;
??實際開發(fā)中,不可能把所有字段建立到聯(lián)合索引,可根據(jù)實際業(yè)務(wù)場景,把經(jīng)常需要查詢的字段建立到聯(lián)合索引中。
?? 在Mysql5.6的版本上推出,用于優(yōu)化查詢。 在索引遍歷過程中,對索引中包含的字段先做判斷,直接過濾掉不滿足條件的記錄,減少回表次數(shù)。
?? 優(yōu)化超多分頁場景。 查詢條件放到子查詢中,子查詢只查主鍵id,然后使用子查詢中確定的主鍵關(guān)聯(lián)查詢其他的屬性字段。