分頁
Limit
limit [ offset ],[ count ]
offset: 數(shù)據(jù)偏移量闰挡。從第一條開始o(jì)ffset =0 , 從第10條開始o(jì)ffset = 9
count : 查詢出個記錄條數(shù)诀诊。
對應(yīng)分頁方法:pageIndex(頁碼),pageCount(頁面大小)
limit (pageIndex - 1)*pageCount , pageCount
子查詢分頁
當(dāng)數(shù)據(jù)很多的時候邑狸,用limit分頁,偏移量很大速客,查詢速度會降低慧妄。
此時对妄,我們可以用子查詢來提高分頁效率,比如:
SELECT * FROM articles WHERE id >=
(SELECT id FROM articles WHERE category_id = 123 ORDER BY id LIMIT 10000, 1) LIMIT 10
join查詢分頁
SELECT * FROM `content` AS t1
JOIN (SELECT id FROM `content` ORDER BY id desc LIMIT ".($page-1)*$pagesize.", 1) AS t2
WHERE t1.id <= t2.id ORDER BY t1.id desc LIMIT $pagesize
效率跟子查詢分頁相近拦赠。
原因:因?yàn)樽硬樵兪窃谒饕贤瓿傻奈∩常胀ú樵兪窃跀?shù)據(jù)文件上完成的,所以子查詢效率速度更高荷鼠。
數(shù)據(jù)庫事務(wù)和特性
原子性:事務(wù)中的所有操作句携,要么全部完成,要么全部不完成允乐。事務(wù)在執(zhí)行中發(fā)生異常矮嫉,會被回滾到之事務(wù)開始之前的狀態(tài),相當(dāng)于這個事務(wù)完全沒有發(fā)生一樣牍疏。
一致性:在事務(wù)開啟之前和完成之后蠢笋,數(shù)據(jù)庫的完整性約束沒有被破壞。
隔離性:同一個時間段內(nèi)鳞陨,只能有一個事務(wù)訪問數(shù)據(jù)昨寞。防止事務(wù)之間操作混淆。
持久性:事務(wù)完成后厦滤,該事務(wù)對數(shù)據(jù)庫的更改會持久的保存在數(shù)據(jù)庫中援岩。
連接查詢
left join : 左連接 。返回左表所有的字段掏导,根據(jù)on后的字段匹配規(guī)則享怀,如果左邊中字段沒有匹配到右邊的字段,則相關(guān)查詢出的右表的字段為null值 趟咆。
right join :右連接添瓷。返回右表所有字段, 根據(jù)on后的字段匹配規(guī)則值纱,如果右邊中字段沒有匹配到左邊的字段鳞贷,則相關(guān)查詢出的左表的字段為null值 。
inner join : 內(nèi)連接虐唠。只返回滿足字段匹配條件的記錄悄晃。
full join ; 完全連接。 返回兩張表所有字段,如果沒有字段之間沒有匹配到妈橄,則查詢出的字段為null值庶近。
交叉連接: 返回兩張表中的笛卡爾積。
數(shù)據(jù)庫優(yōu)化
Sql語句優(yōu)化
1.不要在where中使用眷蚓!= 和 < 鼻种, >的操作符,否則引擎會放棄索引沙热,而進(jìn)行全表掃描叉钥。
2.不要在where中進(jìn)行null 判斷,否則會放棄索引篙贸,而進(jìn)行全表掃描投队。
3.建議用exists 代替 in
4.最好用where子句代替having ,因?yàn)镠aving只會在檢索出所有記錄后才會對結(jié)果集進(jìn)行過濾爵川。