MySQL索引和SQL调优手册
然后开始下一步的分析,既然msgid是被设置为了主键,那一定是全局唯一的,所有,有多少数据量就至少会有多少条msgid;那么检索msg_id基本就是检索整个表了。我们要做的优化就是要尽量减少索引,减少查询的行数;那么就需要思考,通过查询哪些字段才能够减少行数?比如,一个张表里面,所属某个用户的数据,会不会比查询msgid的行数要少?查询某个用户并且是属于某个圈子的,那会不会就更少了?等等。 然后根据实际情况分析,单表里面命中to_id 的行数应该是会小于命中msg_id的,因此要首先保证能够使用到to_id的索引,为此,可以设置主键的时候把msg_id和to_id的顺序交互一下;但是,由于已经是线上的表,已经有了大量数据,并且业务开始运行,这种情况下,修改主键会引发很多问题(当然修改索引是OK的),因此,不建议直接修改主键。 那么,为了保证有效使用to_id的索引,就要新建一个联合索引;那么新建的联合索引的第一索引字段必然是to_id,针对此业务场景,最好能够再加上circle_id索引,这样可以快速索引;这样就得到了新的联合索引(to_id,circle_id)的索引,然后,因为要找msg_id,为此,在此基础上,再加上msg_id。最终得到的联合索引为(to_id,circle_id,msg_id);这样的话,就能够快速检索这样的查询语句了:where to_id = xxx and circle_id = xxx and msgId >= xxx (编辑:西安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |