豪翔天下

MySQL之设计方法

关于架构

  • 一般把读取的请求放在缓存(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条就可以了,就像电话簿一样,先找姓氏,姓氏相同的也会按照名排好序的。

haofly wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创技术分享,您的支持将鼓励我继续创作!