发表于: 2017-10-05 21:30:03

1 715


今天完成的事情:

改完sql表,然后才想起来要用公司的dal.....

那所有的select还要继续改.........


明天计划的事情:

继续改sql表,然后对一下问题

方案设计弄到wiki上

ppt制作流程图


遇到的问题:

收益怎么相应获得?


收获:

①mysql 查询缓存

命中条件:
缓存存在一个hash表,通过查询sql,查询数据库,客户端协议等作为key,在判断是否命中前,mysql不会解析sql,而是直接使用sql去查询缓存,sql任何字符上的不同,如空格,注释都会导致缓存不命中

如果查询中有不确定数据,例如current_date()和now()函数,那么查询完毕后则不会被缓存,所以包含不确定的查询是肯定不会找到可用缓存的


工作流程:
1:服务器接收sql,以sql和一些其他条件为key查找缓存表(额外性能消耗)
2:如果找到了缓存,则直接返回缓存(性能提升)
3:如果没有找到缓存,则执行sql查询,包括原来的sql解析,优化等

4:执行完sql查询结果以后,将sql查询结果存入缓存表(额外性能消耗)


缓存失效:

当某个表正在写入数据,则这个表的缓存(命中检查,缓存写入等)将会处于失效状态.在innodb中,如果某个事物修改了表,则这个表的缓存在事务提交前都会处于失效状态,在这个事务提交之前,这个表的相关查询都无法被缓存


缓存的内存管理:

缓存会在内存中开辟一块内存来维护缓存数据,其中有大概40k的空间是用来维护缓存的元数据的,例如空间内存,数据表和查询结果的映射,sql和查询结果的映射等


②:运行时间的最坏情况和平均情况

最坏情况运行时间是一种保证,那就是运行时间将不会再坏了.在应用中,这是一种最重要的需求,通常,除非特别指定,我们提到的运行时间都是最坏情况的运行时间
平均运行时间是所有情况中最有意义的,因为它是期望的运行时间.也就是说我们运行一段代码时,是希望看到平均运行时间的
现实中,我们一般通过运行一定数量的实验数据后估算出平均运行时间



返回列表 返回列表
评论

    分享到