常見mysql錯誤用法有哪些?小白怎麼學web前端?無論是前端開發還是後台應用,都需要掌握資料庫相關的知識,而mysql是企業常用的資料庫之一。對於乙個web前端小白來說,在完成html+css的基礎學習後,他們還需要學習mysql相關操作,下面列舉幾種比較常見的mysql錯誤用法,希望大家能夠引以為鑑。
1、隱式轉換
sql語句中查詢變數和字段定義型別不匹配是另乙個常見的錯誤。比如下面的語句:
mysql> explain extended select *
from my_balance b
where b.bpn = 14000000123
and b.isverified is null ;mysql> show warnings;
| warning | 1739 | cannot use ref access on index 『bpn』 due to type or collation conversion on field 『bpn』
其中欄位bpn的定義為varchar(20),mysql的策略是將字串轉換為數字之後再比較。函式作用於表字段,索引失效。
上述情況可能是應用程式框架自動填入的引數,而不是程式設計師的原意。現在應用框架很多很繁雜,使用方便的同時也小心它可能給自己挖坑。
2、混合排序
mysql不能利用索引進行混合排序,但在某些場景,還是有機會使用特殊方法提公升效能的。
select *
from my_order o
order by a.is_reply asc,
limit 0, 20
由於is_reply只有0和1兩種狀態,我們按照上面的方法重寫後,執行時間從1.58秒降低到2毫秒。
select *
from ((select *
from my_order o
on a.orderid = o.id
and is_reply = 0
limit 0, 20)
union all
(select *
from my_order o
on a.orderid = o.id
and is_reply = 1
limit 0, 20)) t
order by is_reply asc,
limit 20;
3、exists語句
mysql對待exists子句時,仍然採用巢狀子查詢的執行方式。如下面的sql語句:
select *
from my_neighbor n
on n.id = sra.neighbor_id
and sra.user_id = 『***』
where n.topic_status < 4
and exists(select 1
from message_info m
where n.id = m.neighbor_id
and m.inuser = 『***』)
and n.topic_type <> 5
去掉exists更改為join,能夠避免巢狀子查詢,將執行時間從1.93秒降低為1毫秒。
select *
from my_neighbor n
inner join message_info m
on n.id = m.neighbor_id
and m.inuser = 『***』
on n.id = sra.neighbor_id
and sra.user_id = 『***』
where n.topic_status < 4
and n.topic_type <> 5
注意:1)資料庫編譯器產生執行計畫,決定著sql的實際執行方式。但是編譯器只是盡力服務,所有資料庫的編譯器都不是盡善盡美的。
2)了解資料庫編譯器的特性,才能避規其短處,寫出高效能的sql語句。
3)程式設計師在設計資料模型以及編寫sql語句時,要把演算法的思想或意識帶進來。
4)編寫複雜sql語句要養成使用with語句的習慣,簡潔且思路清晰的sql語句也能減小資料庫的負擔。
MYSQL錯誤用法,有沒踩過坑這些坑?
表資料,千萬 分頁查詢 但當 limit 子句變成 limit 2000000,10 時,既然要使用20秒。要知道資料庫也並不知道第2000000條記錄從什麼地方開始,即使有索引也需要從頭計算一次。出現這種效能問題,多數情形下是程式設計師偷懶了。索引 如上圖並不能解決,分頁查詢的問題 解決的方案 我...
避免常見的HTML5錯誤用法
不要使用section作為div的替代品 人們在標籤使用中最常見到的錯誤之一就是隨意將html5的等價於 具體地說,就是直接用作替代品 用於樣式 在xhtml或者html4中,我們常看到這樣的 header content page content secondary content footer ...
常見筆順錯誤的字 有哪些常見筆順錯誤?
先說下幾個公認的筆順 一 考 的下部分 丂 的首筆為橫,同 巧 朽 等字的偏旁。考,老也。從老省,丂聲。二 與 的首筆為橫。同其繁體 與 的上中部分。寫 的下部分亦同。三 義 的首筆為點。四 九 的首筆為撇。五 比 的筆順為 橫 豎提 撇 豎彎鉤 當然,傳統寫法右邊的撇也可以是橫。六 方 和 萬 的...