Mysql大量數據快速排序方案


  日常開發中經常需要對數據進行排序,通常可以講數據庫中的數據獲取到后通過程序在內存中進行排序,但是這樣排序需要將排序內容從數據庫中查詢到內容,同時使用程序算法進行排序,然后將排序結果更新入數據庫,這樣排序效率較低,開發量較大,本例采用數據庫本身自有屬性進行大數據的快速排序,具體方案如下:

1、刪除臨時表

DROP TABLE IF EXISTS SORT_TEMP

2、創建臨時表

1 CREATE TABLE SORT_TEMP (
2     ID BIGINT(12) NOT NULL AUTO_INCREMENT,
3     SORT_ID BIGINT(12) NOT NULL COMMENT '被排序表ID',
4     PRIMARY KEY (ID)
5 ) ENGINE=INNODB AUTO_INCREMENT=0 DEFAULT CHARSET=UTF8 COMMENT='排序臨時表' 

3、將需要按照的排序規則內容數據插入到臨時表中(按照分類表的狀態倒序,ordby字段不為空的按照正序排在最前面,為空的排在最后面,更新時間倒序,ID正序)

INSERT INTO SORT_TEMP(SORT_ID) SELECT c.id FROM t_catalog c ORDER BY c.state DESC, ISNULL(c.ordby), c.ordby, c.UPDATE_TIME DESC, c.id

4、將臨時表中的數據回填到被排序表的ordby字段中

UPDATE t_catalog c SET c.ordby = (SELECT id FROM SORT_TEMP t WHERE t.SORT_ID = c.id ), c.update_time = NOW() 

5、刪除臨時表

DROP TABLE IF EXISTS SORT_TEMP

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM