mysql数据库最大索引长度,mysql索引最大长度
本文内容列表:
- 1、mysql数据库varchar最多可以存储多少个汉字和数字?
- 2、mysql可以设置索引长度吗?
- 3. MySQL可以创建的最大索引数量以及索引的限制
- 4、MySQL数据库的索引有哪四种类型?
mysql数据库varchar最多可以存储多少个汉字和数字?
首先确定mysql版本。一般1个汉字为2个字节,50个可存储25个汉字。
在4.0版本下,varchar(100)指的是100字节。如果存储UTF8汉字,只能存储33个(每个汉字3个字节)
5.0以上版本,varchar(100),指的是100个字符。无论是数字、字母还是UTF8汉字(每个汉字3个字节),都可以存储100个。
varchar 的特点
1.它比定长(char)类型占用更少的存储空间(使用 ROW_FORMAT=FIXED 创建的 MyISAM 表除外)。
2。使用 1-2 个额外字节来存储值长度。如果列长度=255,则使用1个字节来存储。在其他情况下,您使用 2 个字节来存储它。例如,varchar(10)将占用11字节的存储空间,varchar(500)将占用502字节的存储空间。
3。它节省了空间,因此性能将很有用。更新需要额外的工作。
以上内容参考:百度百科-varchar
mysql可以设置索引长度吗
是的,索引长度越长,消耗的物理空间就越多。 latin1字符集可以设置索引长度为1000字节,而utf8最大索引长度只能为333。

MySQL可以创建的最大索引数量以及索引的限制
MySQL索引类型包括:
1。常规索引
这是最简单的索引,没有任何限制。有多种创建方法:
1。创建索引
代码如下:
CREATE INDEX indexName ON mytable(username(length));
如果是CHAR、VARCHAR类型,长度可以小于实际字段长度;如果是BLOB和TEXT类型,则必须指定长度,下同。
2。更改表结构
代码如下:
ALTER mytable ADD INDEX [indexName] ON (username (length)) -- 创建表时立即指定。
CREATE TABLE mytable( ID INT NOT NULL, 用户名 VARCHAR(16) NOT NULL, INDEX [indexName] (用户名(长度)));
-- 删除索引的语法:
DROP INDEX [indexName] ON mytable;
2. 唯一索引
与之前的常规索引类似,只是索引列的值必须为唯一,但允许零值。对于复合索引,列值的组合必须是唯一的。它有以下创建方法:
代码如下:
CREATE UNIQUE INDEX indexName ON mytable(username(length))
--更改表结构
ALTER mytable ADD UNIQUE [indexName] ON ( username (length))
-- 直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username (length)) );
3主键索引
它是一种特殊的唯一索引,不允许零值。一般情况下,主键索引是在创建表的同时创建的:
代码如下:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY (ID ) );
当然可以使用ALTER命令。请记住:一张表只能有一个主键。
4。组合索引
为了形象地对比单列索引和组合索引,在表中添加多个字段:
代码如下:
创建表 mytable(ID INT NOT NULL, 用户名 VARCHAR(16) NOT NULL, 城市 VARCHAR(50) NOT NULL, 年龄 INT NOT NULL);
为了进一步提取MySQL的效率,你应该考虑创建组合索引。
2:使用索引的注意事项
使用索引时,有一些提示和注意事项:
1。索引不会包含具有 NULL 值的列
只要列包含 NULL 值即可。未纳入索引。只要复合索引中的一列包含 NULL 值,该列对于该复合索引就无效。因此,在设计数据库时,应该让字段的默认值不为NULL。
2。使用短索引
来索引字符串,如果可能的话应指定前缀长度。例如,如果您有一个 CHAR(255) 列,并且大多数值在前 10 或 20 个字符内都是唯一的,则不要对整个列建立索引。短索引不仅可以提高查询速度,还可以节省磁盘空间和 I/O 操作。
3。对索引列进行排序
MySQL 查询只使用一个索引,因此如果在 WHERE 子句中使用该索引,则按顺序排序的列将不会使用该索引。因此,如果数据库默认排序能够满足要求,就不要使用排序;尽量不要包含多列排序。如果有必要,最好为这些列创建复合索引。
4。编辑相似的语句
一般来说,不鼓励使用相似的编辑。如果要用的话,怎么用也是一个问题。像“%aaa%”这样的索引不会被使用,但是像“aaa%”这样的索引将会被使用。
5。请勿使用用户的列
select *,其中 YEAR(adddate)2007;
将对每一行起作用,导致索引失败并执行全表扫描。所以可以改为:
select * from users with adddate '2007-01-01';
6。不要使用 NOT IN 和编辑。
三:SQL优化原则
常见的简化规则如下:
1.确保表连接 (JOIN) 不超过 5 个
2。考虑使用临时表或表变量来存储中间结果。
3。使用更少的子查询
4。巢景不要太深。一般来说,最好不要嵌套两个以上的视图。
5。连接的表越多,编译时间和连接开销就越大,监控性能也就越困难。
6、最好将连接分成更小的部分,一件一件地进行。
7。优先考虑那些会显着降低结果的化合物。
8。拆分的好处不仅在于它减少了SQL Server优化的时间,而且还在于它允许SQL语句以可预测的方式和可预测的顺序执行。
如果你必须连接很多表才能获取数据,这可能意味着设计缺陷。
MySQL数据库有四种类型的索引?
index ---- 普通索引,数据可以重复,没有任何限制。
unique ---- 唯一索引要求索引列的值必须唯一,但允许零值;如果是组合索引,那么列值的组合必须是唯一的。
主键----主键索引是一种特殊的唯一索引。一张表只能有一个主键,不允许有空值。一般情况下,主键索引是与表同时创建的。
组合索引----在多个字段上创建的索引。仅当创建索引时的第一个字段用于搜索条件时,才会使用该索引。
全文 ---- 全文索引是针对大表的文本域:char、varchar和text列都可以创建全文索引。主要用于查找文本中的关键词,并不直接与索引中的值进行比较。 。全文更像是一个搜索引擎,与匹配操作一起使用,而不是通用的“where”语句加“like”。
注意:目前仅MyISAM存储引擎支持全文索引。低于5.6的InnoDB引擎版本尚不支持全文索引。
所有存储引擎每张表至少支持16个索引,索引总长度最小为256字节。索引的存储类型有两种,包括B树索引和哈希索引。
索引可以提高查询速度,但创建和维护索引需要时间,而且还会影响插入速度。如果需要插入大量数据,最好先删除索引,插入数据后再创建索引。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网
