Maison base de données tutoriel mysql mysql索引长度tips innodb和myisam引擎_MySQL

mysql索引长度tips innodb和myisam引擎_MySQL

Jun 01, 2016 pm 01:33 PM
mysql 开发

bitsCN.com

mysql索引长度tips innodb和myisam引擎

 

由于开发人员对索引认识不深或忽略,还有版本不同等问题,在生产环境中创建表失败,引发了一些问题。归纳了一下

    测试环境

 

       mysql> select version();

+------------+

| version()  |

+------------+

| 5.5.31-log | 

+------------+

1 row in set (0.01 sec)

   innodb 引擎

mysql> CREATE TABLE `meta_topic_scan` (   `domain` varchar(257) NOT NULL,   `topic_name` varchar(200) NOT NULL,   `topic_url` varchar(200) NOT NULL,   `topic_pv` int(11) DEFAULT'0',   `topic_uv` int(11) DEFAULT '0',   PRIMARY KEY (`domain`,`topic_url`) ) ENGINE=innodb  DEFAULT CHARSET=utf8;

ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

 

innodb 单列索引长度不能超过767 bytes,联合索引限制是3072 bytes 。对于创建innodb的组合索引中,如果各个列中的长度有单个超过767 bytes,也会创建失败;

 

myisam 引擎 

创建复合索引:

 

mysql> CREATE TABLE `meta_topic_scan` (

    ->   `domain` varchar(200) NOT NULL,

    ->   `topic_name` varchar(200) NOT NULL,

    ->   `topic_url` varchar(200) NOT NULL,

    ->   `topic_pv` int(11) DEFAULT '0',

    ->   `topic_uv` int(11) DEFAULT '0',

    ->   PRIMARY KEY (`domain`,`topic_name`,`topic_url`)

    -> ) ENGINE=myisam DEFAULT CHARSET=utf8 ;

ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes

创建单列索引:

mysql> CREATE TABLE `meta_topic_scan` (

    ->   `domain` varchar(334) NOT NULL,

    ->   `topic_name` varchar(200) NOT NULL,

    ->   `topic_url` varchar(200) NOT NULL,

    ->   `topic_pv` int(11) DEFAULT '0',

    ->   `topic_uv` int(11) DEFAULT '0',

    ->   PRIMARY KEY (`domain`)

    -> ) ENGINE=myisam DEFAULT CHARSET=utf8 ;

ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes

由此可知:myisam 单列索引长度、所创建的复合索引长度和都不能超过1000 bytes,否则会报错,创建失败。

另外不同字符集占用不同字节:latin一个字符占1 bytes,utf8存储一个字符占3 bytes, gbk存储一个字符2 bytes

扩展: innodb复合索引长度为什么是3072 

 我们知道InnoDB一个page的默认大小是16k。由于是Btree组织,要求叶子节点上一个page至少要包含两条记录(否则就退化链表了)。

 

        所以一个记录最多不能超过8k。

        又由于InnoDB的聚簇索引结构,一个二级索引要包含主键索引,因此每个单个索引不能超过4k (极端情况,pk和某个二级索引都达到这个限制)。

         由于需要预留和辅助空间,扣掉后不能超过3500,取个“整数”就是(1024*3)。 

 

单列索引限制

 

         上面有提到单列索引限制767,起因是256×3-1。这个3是字符最大占用空间(utf8)。但是在5.5以后,开始支持4个字节的uutf8。255×4>767, 于是增加了一个参数叫做 innodb_large_prefix。

 

         这个参数默认值是OFF。当改为ON时,允许列索引最大达到3072。

 

               如下效果(5.5):


mysql索引长度tips innodb和myisam引擎_MySQL


bitsCN.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment corriger les erreurs mysql_native_password non chargé sur MySQL 8.4 Comment corriger les erreurs mysql_native_password non chargé sur MySQL 8.4 Dec 09, 2024 am 11:42 AM

L'un des changements majeurs introduits dans MySQL 8.4 (la dernière version LTS en 2024) est que le plugin « MySQL Native Password » n'est plus activé par défaut. De plus, MySQL 9.0 supprime complètement ce plugin. Ce changement affecte PHP et d'autres applications

La page est vide après que PHP est connecté à MySQL. Quelle est la raison de la fonction Die () non valide? La page est vide après que PHP est connecté à MySQL. Quelle est la raison de la fonction Die () non valide? Apr 01, 2025 pm 03:03 PM

La page est vide après que PHP se connecte à MySQL, et la raison pour laquelle la fonction Die () échoue. Lorsque vous apprenez la connexion entre PHP et la base de données MySQL, vous rencontrez souvent des choses déroutantes ...

Comment intégrer efficacement les services Node.js ou Python sous l'architecture LAMP? Comment intégrer efficacement les services Node.js ou Python sous l'architecture LAMP? Apr 01, 2025 pm 02:48 PM

De nombreux développeurs de sites Web sont confrontés au problème de l'intégration de Node.js ou des services Python sous l'architecture de lampe: la lampe existante (Linux Apache MySQL PHP) a besoin d'un site Web ...

Comment partager la même page du côté PC et mobile et gérer les problèmes de cache? Comment partager la même page du côté PC et mobile et gérer les problèmes de cache? Apr 01, 2025 pm 01:57 PM

Comment partager la même page du côté PC et mobile et gérer les problèmes de cache? Dans l'environnement Nginx PHP MySQL construit à l'aide de l'arrière-plan Baota, comment faire le côté PC et ...

Le verrouillage optimiste PHP combiné avec le solde de déduction des transactions a échoué: comment s'assurer que le solde est correctement déduit dans les situations de concurrence? Le verrouillage optimiste PHP combiné avec le solde de déduction des transactions a échoué: comment s'assurer que le solde est correctement déduit dans les situations de concurrence? Mar 31, 2025 pm 11:42 PM

Une explication détaillée du problème de la déduction des soldes en combinaison avec des verrous et des transactions optimistes PHP dans cet article analysera en détail une déduction de solde à l'aide de PHP, de verrous optimistes et de transactions de base de données, seulement ...

Surveillance des gouttelettes Redis à l'aide du service d'exportation Redis Surveillance des gouttelettes Redis à l'aide du service d'exportation Redis Jan 06, 2025 am 10:19 AM

Une surveillance efficace des bases de données Redis est essentielle pour maintenir des performances optimales, identifier les goulots d'étranglement potentiels et garantir la fiabilité globale du système. Redis Exporter Service est un utilitaire robuste conçu pour surveiller les bases de données Redis à l'aide de Prometheus. Ce didacticiel vous guidera tout au long de l'installation et de la configuration complètes de Redis Exporter Service, vous garantissant ainsi d'établir une solution de surveillance de manière transparente. En suivant ce didacticiel, vous obtiendrez une configuration de surveillance entièrement opérationnelle pour surveiller efficacement les mesures de performances de votre base de données Redis.

Debian Strings est-il compatible avec plusieurs navigateurs Debian Strings est-il compatible avec plusieurs navigateurs Apr 02, 2025 am 08:30 AM

"Debianstrings" n'est pas un terme standard, et sa signification spécifique n'est pas encore claire. Cet article ne peut pas commenter directement la compatibilité de son navigateur. Cependant, si "DebianStrings" fait référence à une application Web exécutée sur un système Debian, sa compatibilité du navigateur dépend de l'architecture technique de l'application elle-même. La plupart des applications Web modernes se sont engagées à compatibilité entre les navigateurs. Cela repose sur les normes Web suivantes et l'utilisation de technologies frontales bien compatibles (telles que HTML, CSS, JavaScript) et les technologies back-end (telles que PHP, Python, Node.js, etc.). Pour s'assurer que l'application est compatible avec plusieurs navigateurs, les développeurs doivent souvent effectuer des tests croisés et utiliser la réactivité

See all articles