MySQL使用的一些小技巧(持續更新)

2021-09-25 22:52:23 字數 2428 閱讀 8510

create

table t_user(

id int

primary

keyauto_increment

, email varchar

(255

),

password varchar

(255))

;

每個使用者的email是唯一的,如果使用者使用email作為使用者名稱登陸的話,就需要查詢出email對應的一條記錄。

select

*from t_user where email=?;

上面的語句實現了查詢email對應的一條使用者資訊,但是由於email這一列沒有加索引,會導致全表掃瞄,效率會很低。

select

*from t_user where email=? limit

1;

加上limit 1,只要找到了對應的一條記錄,就不會繼續向下掃瞄了,效率會大大提高。

limit 1適用於查詢結果為1條(也可能為0)會導致全表掃瞄的的sql語句。

如果email是索引的話,就不需要加上limit 1,如果是根據主鍵查詢一條記錄也不需要limit 1,主鍵也是索引。

使用mysql force index 強制索引的目的是對目標表新增最關鍵的索引,使其優先使用該索引篩選資料

select

*from ws_shop a

where

date

(create_time-

interval

6hour

)>

'2016-10-01 06:00:00'

如果表中的資料是百萬級的,這樣查詢是比較慢的;雖然你有可能在字段create_time上面加了索引,但是在where條件中又破壞了索引;導致索引失效;

這是我們優化為:

select

*from ws_shop a force

index

(create_time)

where

date

(create_time-

interval

6hour

)>

'2016-10-01 06:00:00'

先宣告一點,on duplicate key update為mysql特有語法

語句的作用,當insert已經存在的記錄時,執行update

當是一條不存在當記錄,執行insert。

實際開發中存在這樣當情景:首先若資料庫存在某乙個key對應當資料,則修改對應的記錄,否則插入一條新的記錄。

其用法如下:如果在insert語句末尾指定了on duplicate key update,並且插入行後會導致在乙個unique索引或primary key**現重複值,則在出現重複值的行執行update操作,如果不會導致唯一值重複的問題,則執行insert操作。

例如,如下,當資料庫存在id(主鍵)為100的資料時,以下兩個語句的功能等效:

insert

into student(id ,names , age)

values

(100

,"zhangsan",21

)onduplicate

update

update student set age =

21where id =

100

例如,想要遍歷乙個資料量很大的表,通常可以使用如下語句:

select

*from tab_name order

by id desc

limit

[offset],

[pagesize]

;

這樣每次查詢出pagesize數量的內容,然後進行資料的處理,但如果資料表的數量很大,因為limit會遍歷資料表計數,等到offset處才會查詢pagesize條資料,例如pagesize=300 , 開始的時候,查詢出1-300的資料,然後為301-600。。。。以此類推,但是到後面,每次查詢就會是,10,000,001~10,000,300 。。。然後為10,000,301~10,000,600 .此時會嚴重影響查詢效率,每次查詢都會變得十分耗時。

可以改寫為如下結構:

select

*from tab_name where id <

[total-pagesize*page]

order

by id desc

limit

[pagesize]

;

持續收集 Python一些小技巧

0x00 前言 收集一些python的小技巧,主要是效能和一些特性 0x01 內容 slots class image object slots id caption url 一般沒有這個 def init self,id,caption,url self.id id self.caption ca...

使用js的一些小技巧

1 如何優雅的取隨機字元竄 math.random tostring 16 substring 2 13位 math.random tostring 36 substring 2 11位 2 如何優雅的取整 var a 2.33 2 var b 2.33 0 2 var c 2.33 0 2 3 如...

一些小技巧

關注 乙個好的程式設計師不應該把所有的判斷交給編譯器和偵錯程式,應該在程式中自己加以程式保護和錯誤定位,具體措施包括 對於所有有返回值的函式,都應該檢查返回值,除非你確信這個函式呼叫絕對不會出錯,或者不關心它是否出錯。一些函式返回錯誤,需要用其他函式獲得錯誤的具體資訊。例如accept返回inval...