|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。<Pstyle="TEXT-INDENT:2em">征象:一条SQL俄然运转的出格慢。<Pstyle="TEXT-INDENT:2em">- selectuidTable.column_value,first_namelast_name,company,job_title,upper(member_level),upper(service_value)from(select*fromtable(selectcast(multiset(selectbfrombbb)asTaaa)fromdual))uidTable,memberwhereuidTable.column_value=member.login_id(+)andmember.site=alibabaandmember.site=test;
复制代码 <Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">堕落缘故原由:用户增添了一个前提member.site=test,形成毗连的按次变更了,本来的驱动表是uidTable(最多1024笔记录),如今酿成了member表做驱动(600W条)。以是这条语句变的巨慢。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">可是既然是外毗连,为何毗连的按次会改动呢?由于外毗连的毗连按次不是由COST决意的,而是由毗连的前提决意的。发明实行企图以下:<Pstyle="TEXT-INDENT:2em">- -------------------------------------------------------IdOperationNameRowsBytesCost--------------------------------------------------------0SELECTSTATEMENT10187227881551NESTEDLOOPS10187227881552VIEW407269224113COLLECTIONITERATORSUBQUERYFETCH4TABLEACCESSFULLDUAL4072115TABLEACCESSFULLBBB4128726TABLEACCESSBYINDEXROWIDMEMBER1542*7INDEXUNIQUESCANMEMBER_SITE_LID_PK41-------------------------------------------------
复制代码 <Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">为何基本就没有实行外毗连呢?成绩出在member.site=test这个前提上,由于对外毗连的表加了前提,形成外毗连生效。改成member.site(+)=test后,成绩完全办理。<Pstyle="TEXT-INDENT:2em">- ---------------------------------------------------IdOperationNameRowsBytesCost-----------------------------------------------------0SELECTSTATEMENT10187227881551NESTEDLOOPS10187227881552VIEW407269224113COLLECTIONITERATORSUBQUERYFETCH4TABLEACCESSFULLDUAL4072115TABLEACCESSFULLBBB4128726TABLEACCESSBYINDEXROWIDMEMBER1542*7INDEXUNIQUESCANMEMBER_SITE_LID_PK41-----------------------------------------------------------
复制代码 据我的观察,现在有一个趋势,那些经过正式培训的数据库管理员DBA更倾向于选择一个专有关系数据库,例如Oracle。对于一些具有专门数据库管理员的比较大的环境来说,MySQL很难得到宠爱,这时候,关于MySQL是否真的具有良好的可扩展性的争论已经没有意义。 |
|