--- a/wp-includes/wp-db.php
+++ b/wp-includes/wp-db.php
@@ -1943,20 +1943,38 @@
 		if ( $this->checking_collation ) {
 			return true;
 		}
+
+		// We don't need to check the collation for queries that don't read data.
+		$query = ltrim( $query, "\r\n\t (" );
+		if ( preg_match( '/^(?:SHOW|DESCRIBE|DESC|EXPLAIN)\s/i', $query ) ) {
+			return true;
+		}
+
+		// All-ASCII queries don't need extra checking.
+		if ( $this->check_ascii( $query ) ) {
+			return true;
+		}
+
 		$table = $this->get_table_from_query( $query );
 		if ( ! $table ) {
 			return false;
 		}
 
 		$this->checking_collation = true;
-		$this->get_table_charset( $table );
+		$collation = $this->get_table_charset( $table );
 		$this->checking_collation = false;
 
+		// Tables with no collation, or latin1 only, don't need extra checking.
+		if ( false === $collation || 'latin1' === $collation ) {
+			return true;
+		}
+
 		$table = strtolower( $table );
 		if ( empty( $this->col_meta[ $table ] ) ) {
 			return false;
 		}
 
+		// If any of the columns don't have one of these collations, it needs more sanity checking.
 		foreach( $this->col_meta[ $table ] as $col ) {
 			if ( empty( $col->Collation ) ) {
 				continue;
@@ -1984,6 +2002,7 @@
 	 *                        such as 'field' are retained in each value array. If we cannot
 	 *                        remove invalid characters, a {@see WP_Error} object is returned.
 	 */
+		// If any of the columns don't have one of these collations, it needs more sanity checking.
 	protected function strip_invalid_text( $data ) {
 		// Some multibyte character sets that we can check in PHP.
 		$mb_charsets = array(
