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...