MySQL: Rassembler dans une requête des effets secondaires?
Mon OpenCart
tableau de classement est utf8_bin
, malheureusement je ne peux pas rechercher les noms de produits avec des accents dans leur nom. J'ai cherché sur Google et trouvé que le classement doit être utf8_general_ci
accent compatible et de la recherche insensible à la casse.
Ce que Si j'ajoute rassembler déclaration à la requête de recherche?
SELECT *
FROM `address`
COLLATE utf8_general_ci
LIMIT 0 , 30
N'y a aucune (mauvaise) effet secondaire? J'rouge sur les problèmes liés à l'indexation, de la performance? Ou il est totalement sûr?
Je doute d'une instruction select simple serait de mauvais effets secondaires (à part les problèmes de performances avec l'instruction select vous êtes d'exécution). Après tout, vous n'êtes pas la modification de la définition de la table.
OriginalL'auteur Adrian | 2015-04-28
Vous devez vous connecter pour publier un commentaire.
Je crains que vous avez à considérer les effets secondaires sur les performances des requêtes, en particulier ceux de l'utilisation d'index. Voici un test simple:
Vous pouvez voir que MySQL est l'arrêt de l'aide de l'index sur a1 lorsque vous effectuez une recherche en utilisant un autre classement, qui peut être un énorme problème pour vous.
À assurez-vous que votre index à utiliser pour les requêtes, vous pouvez avoir à modifier votre classement de la colonne la plus fréquemment utilisée.
Uniquement sur les requêtes à l'aide de classement différent. Si vos requêtes utilisent pas (par défaut) de classement, je pense que mysql va encore être en mesure d'utiliser l'index.
OriginalL'auteur Tim3880
Dans à l'aide de l'assemblage dans les instructions SQL, je ne trouve pas que de l'utilisation, de toute façon pour l'expliquant, votre principale question des effets de l'utilisation des classements, j'ai trouvé quelques trucs, mais au premier abord:
De dev.mysql.com:
Dans la mesure où le codage des caractères est modifié, MySQL correctement re-coder les valeurs pour le nouveau jeu de caractères si aller du simple au multi-octets ou vice-versa. Méfiez-vous que toutes les valeurs qui deviennent trop grand pour la colonne sera tronqué.[1]
Avec plusieurs opérandes, il peut y avoir ambiguïté. Par exemple:
Si la comparaison utilise le classement de la colonne
x
, ou de la chaîne de caractères littérale'Y'
? Les deuxx
et'Y'
avoir des classements, de sorte que le classement l'emporte?Le Standard SQL résout ces questions à l'aide de ce qu'on appelait “coercibility” règles. [3]
ORDER BY
-[aussi dansWHERE
]- ne peut pas utiliser deINDEX
; par conséquent, il pourrait être étonnamment inefficace. [4]utf8_general_ci
sera presque certainement effectuer plus lentement dans les comparaisons queutf8_bin
en raison du supplément de recherches/calcul).Cependant, si l'on contraint un classement qui est définie sur un jeu de caractères différent, MySQL aurait pour transcoder les valeurs de colonne (ce qui aurait un impact sur les performances).[5]
OriginalL'auteur shA.t
Si possible, de modifier la définition de la colonne(s).
(Vous devez inclure quoi que ce soit d'autre qui était déjà dans la définition de la colonne.) Si vous avez plusieurs colonnes de modifier, de les faire tous de la même MODIFIER (pour la vitesse).
Si, pour une raison quelconque, vous ne pouvez pas faire la
ALTER
, alors, oui, vous pouvez modifier lesSELECT
pour modifier le classement:La
SELECT
vous avez mentionné n'avait pas deWHERE
clause de filtrage, afin de me changer le cas de test:Disons que vous avez de ce, qui se trouve seulement " San José:
Inclure
San José
:Si vous pourriez avoir des "combinant les accents", pensez à utiliser utf8_unicode_ci. De plus, sur la Combinaison des Diacriticals et Plus sur votre sujet.
Comme pour les effets secondaires? Aucun, à l'exception de potentiellement grand: l'index sur La colonne ne peut pas être utilisé. Dans mon deuxième
SELECT
(ci-dessus),INDEX(city)
est inutile. LeALTER
évite cette perte de performance sur laSELECT
, mais la seule foisALTER
, lui-même, est coûteuse.OriginalL'auteur Rick James
Ce qui pourrait aider: UTF-8: Général? Bin? Unicode?
Veuillez noter que
utf8_bin
est également sensible à la casse. Donc je pencherais pour modifier le tableau de classement deutf8_general_ci
et avoir la tranquillité d'esprit pour l'avenir.OriginalL'auteur MTP