mysql - 為什么SQL使用limit顯示出來的前五行是亂序的
問題描述
數據本來是這樣的然后使用SELECT company_id,company_name,tel FROM table LIMIT 5;
顯示如下
然后問題就來了,使用SELECT comapny_id,company_name FROM table LIMIT 5;
顯示如下
為什么少使用了一列就會導致數據亂序輸出呢?
問題解答
回答1:測試了下, 當table 有 PRIMARY KEY 的時候根據PRIMARY KEY 來排序,如果沒有,則根據TABLE_INDEX 來排序,樓主方便貼一下SHOW INDEX FROM table 結果嗎?不過建議使用 ORDER BY xx LIMIT xx 根據ORDER BY 后面的指定字段排序,一目了然,簡潔易懂。
回答2:explain下這2個SQL語句,看看type和key值是不是不一樣。猜想應該是根據查詢的列使用了不同的排序方式(可能是mysql自己判斷的最優的排序方式)。所以最好能夠加上order by。避免查到重復的數據,題主可以試下你2條sql語句查詢字段再少一個查詢看看,排序結果可能又會不一樣。針對題主分頁的情況還是加上order by吧。一般分頁都是加上order by的。
回答3:你又沒有指定排序的列,必須order by 字段才有意義,否則的話當然是隨便給幾條啦。
回答4:explain SELECT comapny_id,company_name FROM table LIMIT 5;
看看 使用的索引情況 可能根據索引排序了
回答5:沒有主鍵又沒有指定排序的話就是亂的;有主鍵的話會默認主鍵排序,沒有主鍵你要數據不亂的話就要指定排序字段
相關文章:
1. python如何不改動文件的情況下修改文件的 修改日期2. angular.js - 不適用其他構建工具,怎么搭建angular1項目3. angular.js - Angular路由和express路由的組合使用問題4. python - django 里自定義的 login 方法,如何使用 login_required()5. java8中,邏輯與 & 符號用在接口類上代表什么意思6. mysql優化 - mysql count(id)查詢速度如何優化?7. mysql主從 - 請教下mysql 主動-被動模式的雙主配置 和 主從配置在應用上有什么區別?8. 主從備份 - 跪求mysql 高可用主從方案9. node.js - node_moduls太多了10. python - 關于ACK標志位的TCP端口掃描的疑惑?
