关于架构
- 一般把读取的请求放在缓存(Redis),而更新请求放在数据库
关于索引
- 数据查询只能用到一个索引,不过这个只是说的是单表查询,联表查询实际上每个表都可以用到其独立的索引
有些时候索引并不会用到,比如
where key like ‘keyword\%’:这里可以用到key索引
where key like ‘\%keyword\%’:这里用不到key的索引适当建立复合索引:
前几天看了“caoz的梦呓”的文章《如何应对并发(1) - 关于数据索引》,理解了建立复合索引所需要考虑的一些东西,顺序不同效率也有很大的不同。
‘SELECT * FROM user where area = ‘$area’ order by lastlogin desc limit 30;’
如果只把area当做索引,那么数据库会把符合这个area的所有结果都拿出来,然后按照lastlogin来进行排序;
如果只把lastlogin做为索引,那么数据库会从最后一条开始往前遍历,每条都会对比area,直到数出30条
如果lastlogin+area建立符合,和单独lastlogin索引是一样的
如果area+lastlogin,把两个字段拼接然后排好序后,看这条SQL在这个数列中查询的提现,所命中的完全是连续的30条,仅仅遍历30条索引即可
我最先以为简历复合索引也会是先查找出area,再拿出来排序哟,但其实索引都是预先排好了的,这里就相当于先按照area排序,area相同的再按照lastlog
in进行排序,这样,只要找到area,然后取前面30条就可以了,就像电话簿一样,先找姓氏,姓氏相同的也会按照名排好序的。