mysql 分页效率_MYSql分页查询效率提高
CREATE?TABLE?`goods`?(
`UrlId`?char(100)?CHARACTER?SET?utf8?NOT?NULL,
`Title`?varchar(100)?CHARACTER?SET?utf8?DEFAULT?NULL,
`CreateTime`?char(30)?CHARACTER?SET?utf8?DEFAULT?NULL,
PRIMARY?KEY?(`UrlId`)
)
上面是本人表格的結構,本人的程序是用來做搜索引擎的,UrlId用來存儲網址,title存標題,UrlId網址是主鍵唯一,
原因是是做搜索引擎的緣故,所以數據極其龐大,千萬以上吧,之前分頁看到都是用Limite,但是聽說數據超大的時候回產生效率極其低下的情況,本人看到其他解決方案就是
SELECT?*?FROM?goods?WHERE?id?>=?(SELECT?id?FROM?table?LIMIT?1000000,?1)?LIMIT?10;
都是有一個對那個自增的ID進行限制,可是本人的主鍵是UrlId?是字符串,不是普通的ID數字,所以這個有點乏力,希望大家能幫忙寫出解決方案(原因是本人擅長前臺,而且之前是sqlserver?的,所以代碼不擅長,最好有具體的代碼,謝謝了。)
解決方案
50
另外,把代碼改為:
SELECT?*?FROM?goods?WHERE?UrlId?in?(SELECT?UrlId?FROM?table?LIMIT?1000000,?10)?;
15
引用?8?樓?telwo?的回復:
Quote: 引用?4?樓?yupeigu?的回復:
另外,把代碼改為:
SELECT?*?FROM?goods?WHERE?UrlId?in?(SELECT?UrlId?FROM?table?LIMIT?1000000,?10)?;
另外本人還有一個排序的情況就是,本人為了讓本人的網頁顯示每時每刻都在刷新,本人會按照時間排序,所以首頁顯示的分頁情況,都是按時間最近插入的數據,就是還會order??by??CreateTime??這樣可以怎么樣做呢
假如要按照createtime來排序,可以這樣創建索引:
create?index?idx_googs_createtime?on?(createtime)?就可以了
至于代碼,和上面的一樣。
另外,你說的假如增加了自增id,還需要按照?url來進行查詢,這個也是可以的,只要給urlid再創建一個索引就可以,那么就是這么創建:
create?index?idx_googs_createtime_urlid?on?(createtime,UrlId)
30
引用?10?樓?yupeigu?的回復:
Quote: 引用?8?樓?telwo?的回復:
Quote: 引用?4?樓?yupeigu?的回復:
另外,把代碼改為:
SELECT?*?FROM?goods?WHERE?UrlId?in?(SELECT?UrlId?FROM?table?LIMIT?1000000,?10)?;
另外本人還有一個排序的情況就是,本人為了讓本人的網頁顯示每時每刻都在刷新,本人會按照時間排序,所以首頁顯示的分頁情況,都是按時間最近插入的數據,就是還會order??by??CreateTime??這樣可以怎么樣做呢
假如要按照createtime來排序,可以這樣創建索引:
create?index?idx_googs_createtime?on?(createtime)?就可以了
至于代碼,和上面的一樣。
另外,你說的假如增加了自增id,還需要按照?url來進行查詢,這個也是可以的,只要給urlid再創建一個索引就可以,那么就是這么創建:
create?index?idx_googs_createtime_urlid?on?(createtime,UrlId)
對的,只是增加一列計數而已,對查詢不影響。
5
還是建議用自增或本人生成的ID做主鍵。
主鍵相當於唯一索引,它是要占用額外的空間的,何況你這還是char(100)的大小。
CodeBye 版權所有丨如未注明 , 均為原創丨本網站采用BY-NC-SA協議進行授權 , 轉載請注明MYSql分頁查詢效率提高!
總結
以上是生活随笔為你收集整理的mysql 分页效率_MYSql分页查询效率提高的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux开发板显示百叶窗图片,03Li
- 下一篇: java get null_java 获