分页
Limit
limit [ offset ],[ count ]
offset: 数据偏移量。从第一条开始offset =0 , 从第10条开始offset = 9
count : 查询出个记录条数。
对应分页方法:pageIndex(页码),pageCount(页面大小)
limit (pageIndex - 1)*pageCount , pageCount
子查询分页
当数据很多的时候,用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
效率跟子查询分页相近。
原因:因为子查询是在索引上完成的,普通查询是在数据文件上完成的,所以子查询效率速度更高。
数据库事务和特性
原子性:事务中的所有操作,要么全部完成,要么全部不完成。事务在执行中发生异常,会被回滚到之事务开始之前的状态,相当于这个事务完全没有发生一样。
一致性:在事务开启之前和完成之后,数据库的完整性约束没有被破坏。
隔离性:同一个时间段内,只能有一个事务访问数据。防止事务之间操作混淆。
持久性:事务完成后,该事务对数据库的更改会持久的保存在数据库中。
连接查询
left join : 左连接 。返回左表所有的字段,根据on后的字段匹配规则,如果左边中字段没有匹配到右边的字段,则相关查询出的右表的字段为null值 。
right join :右连接。返回右表所有字段, 根据on后的字段匹配规则,如果右边中字段没有匹配到左边的字段,则相关查询出的左表的字段为null值 。
inner join : 内连接。只返回满足字段匹配条件的记录。
full join ; 完全连接。 返回两张表所有字段,如果没有字段之间没有匹配到,则查询出的字段为null值。
交叉连接: 返回两张表中的笛卡尔积。
数据库优化
Sql语句优化
1.不要在where中使用!= 和 < , >的操作符,否则引擎会放弃索引,而进行全表扫描。
2.不要在where中进行null 判断,否则会放弃索引,而进行全表扫描。
3.建议用exists 代替 in
4.最好用where子句代替having ,因为Having只会在检索出所有记录后才会对结果集进行过滤。