公司一次对mysql 树状结构设计教训吧,message表示一条微博,微博可以被转发,如果一条微博被转发一万次,会产生一万条微博。
但致命的是,我们在表结构设计的时候没有保存root_id,导致的后果是,如果要找一条原发只能通过photo_id +category来查询,比如:
explain select id from message_message where status=0 and (category=1 or category=9) and photo_id =329515
这样的后果是mysql扫描rows和被收集数成正比,几个收集量比较大ID就能导致mysql产生上万次的行扫描: