jenkins-bot has submitted this change and it was merged. Change subject: Use one query per term type in SqlEntityInfoBuilder::collectTermsForEntities ......................................................................
Use one query per term type in SqlEntityInfoBuilder::collectTermsForEntities This is way faster on MySQL, see T147748#2711717 for benchmarks. Bug: T147748 Change-Id: Ide5dc20cfd0ce7b4a3d465495dc7be91c87159b6 --- M lib/includes/Store/Sql/SqlEntityInfoBuilder.php M lib/tests/phpunit/Store/EntityInfoBuilderTest.php 2 files changed, 43 insertions(+), 12 deletions(-) Approvals: Thiemo Mättig (WMDE): Looks good to me, approved jenkins-bot: Verified diff --git a/lib/includes/Store/Sql/SqlEntityInfoBuilder.php b/lib/includes/Store/Sql/SqlEntityInfoBuilder.php index 0fe4b65..337f5b1 100644 --- a/lib/includes/Store/Sql/SqlEntityInfoBuilder.php +++ b/lib/includes/Store/Sql/SqlEntityInfoBuilder.php @@ -351,8 +351,8 @@ 'term_entity_id' => $entityIds, ); - if ( $termTypes ) { - $where['term_type'] = $termTypes; + if ( $termTypes === null ) { + $termTypes = [ null ]; } if ( $languages ) { @@ -361,14 +361,17 @@ $dbw = $this->getConnection( DB_SLAVE ); - $res = $dbw->select( - $this->termTable, - array( 'term_entity_type', 'term_entity_id', 'term_type', 'term_language', 'term_text' ), - $where, - __METHOD__ - ); + // Do one query per term type here, this is way faster on MySQL: T147748 + foreach ( $termTypes as $termType ) { + $res = $dbw->select( + $this->termTable, + array( 'term_entity_type', 'term_entity_id', 'term_type', 'term_language', 'term_text' ), + array_merge( $where, $termType !== null ? [ 'term_type' => $termType ] : [] ), + __METHOD__ + ); - $this->injectTerms( $res ); + $this->injectTerms( $res ); + } $this->releaseConnection( $dbw ); } diff --git a/lib/tests/phpunit/Store/EntityInfoBuilderTest.php b/lib/tests/phpunit/Store/EntityInfoBuilderTest.php index 8b3730a..c3c59da 100644 --- a/lib/tests/phpunit/Store/EntityInfoBuilderTest.php +++ b/lib/tests/phpunit/Store/EntityInfoBuilderTest.php @@ -189,14 +189,14 @@ public function collectTermsProvider() { return array( - array( + 'empty set' => array( array(), null, null, array() ), - array( + 'all term types' => array( array( new ItemId( 'Q1' ), new PropertyId( 'P3' ), @@ -229,7 +229,7 @@ ) ), - array( + 'one term type' => array( array( new ItemId( 'Q1' ), new PropertyId( 'P3' ), @@ -247,6 +247,34 @@ 'Q7' => array( 'id' => 'Q7', 'type' => Item::ENTITY_TYPE, 'labels' => array() ), ) ), + + 'two term types' => array( + array( + new ItemId( 'Q1' ), + new PropertyId( 'P3' ), + new ItemId( 'Q7' ), + ), + array( 'label', 'description' ), + null, + array( + 'Q1' => array( 'id' => 'Q1', 'type' => Item::ENTITY_TYPE, + 'labels' => $this->makeLanguageValueRecords( array( + 'en' => 'label:Q1/en', 'de' => 'label:Q1/de' ) ), + 'descriptions' => $this->makeLanguageValueRecords( array( + 'en' => 'description:Q1/en', 'de' => 'description:Q1/de' ) ) + ), + 'P3' => array( 'id' => 'P3', 'type' => Property::ENTITY_TYPE, + 'labels' => $this->makeLanguageValueRecords( array( + 'en' => 'label:P3/en', 'de' => 'label:P3/de' ) ), + 'descriptions' => $this->makeLanguageValueRecords( array( + 'en' => 'description:P3/en', 'de' => 'description:P3/de' ) ) + ), + 'Q7' => array( 'id' => 'Q7', 'type' => Item::ENTITY_TYPE, + 'labels' => array(), + 'descriptions' => array() + ), + ) + ), ); } -- To view, visit https://gerrit.wikimedia.org/r/315616 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ide5dc20cfd0ce7b4a3d465495dc7be91c87159b6 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: Hoo man <h...@online.de> Gerrit-Reviewer: Addshore <addshorew...@gmail.com> Gerrit-Reviewer: Aude <aude.w...@gmail.com> Gerrit-Reviewer: Daniel Kinzler <daniel.kinz...@wikimedia.de> Gerrit-Reviewer: Jcrespo <jcre...@wikimedia.org> Gerrit-Reviewer: Ladsgroup <ladsgr...@gmail.com> Gerrit-Reviewer: Thiemo Mättig (WMDE) <thiemo.maet...@wikimedia.de> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits