首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么使用INT来选择包含比使用字符串慢得多的数字的Varchar索引?

这个问题的答案可以通过以下步骤来解释:

首先,我们需要理解什么是VARCHAR和INT。VARCHAR是一种可变长字符串类型,而INT是一种整数类型。在大多数数据库中,VARCHAR的存储空间比INT多,因此在使用VARCHAR时,数据库需要分配更多的存储空间来存储每个值。

其次,我们需要理解索引的作用。索引是一种数据结构,可以帮助数据库快速检索数据。在大多数数据库中,索引可以用于加快SELECT查询的速度。

现在,我们可以考虑使用INT来选择包含比使用字符串慢得多的数字的VARCHAR索引。在大多数情况下,使用INT是一个更好的选择,因为INT是整数类型,存储空间更小,而且在大多数情况下可以更快地处理。此外,如果需要将VARCHAR类型转换为INT类型,那么可以使用CAST()函数或CONVERT()函数将VARCHAR类型转换为INT类型,这需要额外的处理时间。

因此,使用INT来选择包含比使用字符串慢得多的数字的VARCHAR索引通常是一个更好的选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL数据类型与优化

比如: varchar(20),可以存20个中文、英文、符号,不要无脑使用varchar(150) 3、整形字符操作代价更低。...另一方面,TIMESTAMP允许时间范围要小得多,有时候它特殊能力会变成障碍 整数类型  1、TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT分别使用8(-127~127...实数类型 1、实数是带有小数部分数字。然而它们不只是为了存储小数部分,还可以使用DECIMAL存储BIGINT还大整数。MySQL既支持精确类型,也支持不精确类型。...6、MySQL不能将BLOB和TEXT列全部长度字符串进行索引,也不能使用这些索引消除排序。...2、应避免使用字符串类型作为标志符,因为它们很消耗空间,并且通常比数字类型,有其是在MyISAM表中使用字符串作为标识符要特别小心,MyISAM默认对字符串压缩索引,这会导致查询很多。

1.6K10

MySQL 高性能表设计规范

对于存储和计算来说, INT(1) 和 INT(20) 是相同。 2.实数类型 实数是带有小数部分数字。...3.字符串类型 VARCHAR 用于存储可变⻓字符串,长度支持到65535 需要使用1或2个额外字节记录字符串长度 适合:字符串最大⻓度平均⻓度⼤很多;更新很少 CHAR 定⻓,⻓度范围是1~...ENUM和SET列适合存储固定信息, 例如有序状态、 产品类型、 人性别。 字符串类型 如果可能, 应该避免使用字符串类型作为标识列, 因为它们很消耗空间, 并且通常比数字类型。...低千秒级精度时间戳就是一个例子,另一个例子是以个1Pv4地址,人们经常使用VARCHAR(15)列存储IP地址,然而, 它们实际上是32位无符号整数, 不是字符串。...当数据内存大时这可能关联要快得多,因为这样避免了随机I/0。 单独表也能使用更有效索引策略。

79120

高性能MySQL(第3版)阅读笔记

3、数据类型越短越好,尽量避免NULL(NULL索引,统计,比较更复杂,可为NULL列需要存储空间更多) 4、整数(tinyint 8位,smallint 16位,mediumint 24位,int...,每4个字节存储9个数字,小数点占一个字节 6、float 在存储相同范围数据,占用存储空间decimal小,float 使用4个字节存储,double占用8个字节 7、varchar 存储变成字符串...8、以下情况适合使用varchar[高性能MySQL(第3版)p115]: 字符串最大长度平均长度大很多,列更新少(不会产生碎片);使用类似UTF8字符集,每个字符使用不同字节数存储 9、char...枚举列,字符串列表是固定,每次添加修改都需要使用alter table。将char,varchar 和枚举类型关联时,会比直接cahr,varchar关联。...对于in中有大量值时,in查询or快 18、mysql 文件排序需要空间想象要大得多,因为mysql会给排序记录分配足够长度固定长度空间,排序消耗临时空间磁盘上原有空间大得多

80640

高性能MySQL(2)——Schema与数据类型优化

可为NULL列会使用更多存储空间,在 MySQL里也需要特殊处理。 在为列选择数据类型时: 第一步需要确定合适大类型:数字字符串、时间等; 第二步是选择具体类型。...对于存储和计算来说,INT(1)和INT(20)是相同 2.2、实数类型 实数是带有小数部分数字。...2.4、位数据类型 可以使用BIT列存储一个或多个true/false值,BIT(1)包含单个位字段,最多可包含64个位。 MySQL将BIT当做字符串类型,而不是数字类型。...当查询BIT(1)时,结果是一个包含二进制0或1字符串,而不是ASCII码中“0”或“1”。 BIT列进行比较时,MySQL会将位字符串转换为十进制数字进行比较。 例如:‘111’ = 7。...一般来说,在没有特殊要求情况下,整型 通常是标识列最好选择,因为它很快,而且可以自动递增。 如果可以的话,应该尽量避免使用字符串当做标识列,它很消耗空间,而且整型

68920

SQL优化思路+经典案例分析

呢、我们可以通过慢查询日志查看SQL。...ref_or_null:这种连接类型类似于ref,区别在于MySQL会额外搜索包含NULL值行 index_merge:使用索引合并优化方法,查询使用了两个以上索引。...对于InnoDB表,此数字是估计值,并非一定是个准确值。 1.2.3 filtered 该列是一个百分值,表里符合条件记录数百分。...如下: 如果给数字加上'',也就是说,传是一个字符串呢,当然是走索引,如下图: 为什么第一条语句未加单引号就不走索引了呢?...这是因为不加单引号时,是字符串数字比较,它们类型不匹配,MySQL会做隐式类型转换,把它们转换为浮点数再做比较。隐式类型转换,索引会失效。

76010

高性能MySQL (一):Schema与数据类型优化

如果查询中包含可为NULL列,对MySQL来说更难优化,因为可为NULL列使得索引索引统计和值比较都更复杂。可为NULL列会使用更多存储空间,在MySQL里也需要特殊处理。...对于存储和计算来说,INT(1) 和 INT(20)是相同。 1.2 实数类型 实数是带有小数部分数字。然而,它们不只是为了存储小数部分;也可以使用DECIMAL存储BIGINT还大整数。...字符串类型 字符串类型很消耗空间,且通常比数字类型,所以也应避免使用字符串作为标识列。 对于完全“随机”字符串也需要多加注意,例如MD5()、SHA1()或者UUID()产生字符串。...IPv4 地址 人们经常使用VARCHAR(15)列存储IP地址。然而,它们实际上是32位无符号整数,不是字符串。用小数点将地址分成四段表示方法只是为了让人们阅读容易。...如果不需要关联表,则对大部分查询最差情况——即使表没有使用索引——是全表扫描。当数据内存大时这可能关联要快得多,因为这样避免了随机 I/O 。 单独表也能使用更有效索引策略。

1.1K40

后端程序员必备:MySql索引失效十大杂症

,如果查询条件传了一个数字过去,它是不走索引,如图所示: ?...如果给数字加上'',也就是传一个字符串呢,当然是走索引,如下图: ? 分析与结论: 为什么第一条语句未加单引号就不走索引了呢?...这是因为不加单引号时,是字符串数字比较,它们类型不匹配,MySQL会做隐式类型转换,把它们转换为浮点数再做比较。 三、like通配符可能导致索引失效。...可以有两种方式优化: 使用覆盖索引 把%放后面 附: 索引包含所有满足查询需要数据索引,称为覆盖索引(Covering Index)。...总结 总结了索引失效十大杂症,在这里来个首尾呼应吧,分析一下我们生产那条sql。

66110

MySQL性能优化(二):选择优化数据类型

大部分人在创建数据库表时,基本一股脑使用INTVARCHAR这两种类型最多,至于长度,则会选择足够大即可,避免日后不够用咋办。只顾当时一时爽,之后坑谁谁难受。...VARCHAR需要使用1或2个额外字节记录字符串长度(如果字段最大长度小于或等于255字节,则只使用1个字节表示长度,否则使用2个字节表示长度)。...TIMESTAMP只使用4个字节存储空间,因此它范围DATETIME小得多,只能表示从1970年到2038年。...2.字符串类型 如果可以避免,尽可能避免使用字符串类型作为标识列类型,因为它很消耗空间,并且通常比数字类型。...尤其是在MyISAM存储引擎表里使用字符串作为标识列时,要特别的小心,MyISAM默认对字符串使用压缩索引,这会导致查询很多。

1.3K00

mysql密码字段类型_MySQL 字段类型

例如,指定一个字段类型为 INT(6),就可以保证所包含数字少于 6 个值从数据库中检索出来时能够自动地用空格填充。需要注意是,使用一个宽度指示器不会影响字段大小和它可以存储范围。...而 VARCHAR 类型把它视为最大值并且只使用存储字符串实际需要长度(增加一个额外字节存储字符串本身长度)存储值。...MySQL 认为 ENUM 类型集合中出现值是合法输入,除此之外其它任何输入都将失败。这说明通过搜索包含字符串或对应数字索引为 0 行就可以很容易地找到错误记录位置。...选择相对简单数据类型 数字类型相对字符串类型要简单多,尤其是在比较运算时,所以我们应该选择最简单数据类型,比如说在保存时间时,因为PHP可以良好处理LINUX时间戳所以我们可以将日期存为int(...VARCHAR与CHAR VARCHAR是可变长度字符串类型,那么即然长度是可变就会使用1,2个字节保存字符长度,如果长度在255内使用1个字节保存字符长度,否则使用2个字符保存长度。

14.4K20

盘点MySQL查询12个原因

如下: 如果给数字加上'',也就是说,传是一个字符串呢,当然是走索引,如下图: 为什么第一条语句未加单引号就不走索引了呢?...这是因为不加单引号时,是字符串数字比较,它们类型不匹配,MySQL会做隐式类型转换,把它们转换为浮点数再做比较。隐式类型转换,索引会失效。...使用force index 强行选择某个索引 修改你SQl,引导它使用我们期望索引 优化你业务逻辑 优化你索引,新建一个更合适索引,或者删除误用索引。...那为什么不慢?其实是因为写redo log过程是顺序写磁盘。磁盘顺序写会减少寻道等待时间,速度随机写要快很多。 7.3 为什么会出现脏页呢?...8. order by 文件排序 order by就一定会导致查询吗?不是这样哈,因为order by平时用得多,并且数据量一上来,还是走文件排序的话,很容易有SQL

1.4K10

MySQL-2

字符串最大长度平均长度大很多时;列更新很少;使用了UTF-8时比较适合用VARCHAR。MySQL在存储和检索时会保留末尾空格。InnoDB会把过长VARCHAR存储为BLOB。...CHAR适合存储很短字符串,或者所有值都接近于一个长度。CHAR适合存储密码MD5值,对于不经常变更值CHAR也比较合适。对于比较短列,CHARVARCHAR在存储空间上也更有效率。...MySQL比较BINARY字符串时,每次按一个字节,并且根据该字节数值进行比较,因此二进制比较比字符比较简单得多,所以更快。...MySQL不能将BLOB和TEXT列全部长度字符串进行索引,也不能使用这些索引消除排序。...这样会导致混乱 枚举顺序是按照背地里数字排序,因此,你Order by语句可能得不到按字符串排序结果。解决方案就是声明时候就把字符串排好序,枚举常量对应数字是和声明时顺序有关

80910

盘点MySQL查询12个原因

如下: 如果给数字加上'',也就是说,传是一个字符串呢,当然是走索引,如下图: 为什么第一条语句未加单引号就不走索引了呢?...这是因为不加单引号时,是字符串数字比较,它们类型不匹配,MySQL会做隐式类型转换,把它们转换为浮点数再做比较。隐式类型转换,索引会失效。...使用force index 强行选择某个索引 修改你SQl,引导它使用我们期望索引 优化你业务逻辑 优化你索引,新建一个更合适索引,或者删除误用索引。...那为什么不慢?其实是因为写redo log过程是顺序写磁盘。磁盘顺序写会减少寻道等待时间,速度随机写要快很多。 7.3 为什么会出现脏页呢?...8. order by 文件排序 order by就一定会导致查询吗?不是这样哈,因为order by平时用得多,并且数据量一上来,还是走文件排序的话,很容易有SQL

1.1K20

Mysql入门(二)

例如,指定一个字段类型为 INT(6),就可以保证所包含数字少于 6 个值从数据库中检索出来时能够自动地用空格填充。需要注意是,使用一个宽度指示器不会影响字段大小和它可以存储范围。...而 VARCHAR 类型把它视为最大值并且只使用存储字符串实际需要长度(增加一个额外字节存储字符串本身长度)存储值。...MySQL 认为 ENUM 类型集合中出现值是合法输入,除此之外其它任何输入都将失败。这说明通过搜索包含字符串或对应数字索引为 0 行就可以很容易地找到错误记录位置。...选择相对简单数据类型 数字类型相对字符串类型要简单多,尤其是在比较运算时,所以我们应该选择最简单数据类型,比如说在保存时间时,因为PHP可以良好处理LINUX时间戳所以我们可以将日期存为int(...VARCHAR与CHAR VARCHAR是可变长度字符串类型,那么即然长度是可变就会使用1,2个字节保存字符长度,如果长度在255内使用1个字节保存字符长度,否则使用2个字符保存长度。

87720

⑩② 【MySQL索引】详解MySQL`索引`:结构、分类、性能分析、设计及使用规则。

思考题 为什么InnoDB存储引擎选择使用B+Tree索引结构?...如果是字符串头部模糊匹配,索引失效。 使用or连接条件: 用or分割开条件,如果or前条件中列有索引,而or后面的列中没有索引,那么涉及索引都不会被用到。...前缀索引: 当字段类型为字符串(varchar,text等)时,有时候需要索引很长字符串,这会让索引变得很大,查询时,浪费大量磁盘IO,影响查询效率。...选取部分前缀建立索引 CREATE INDEX 索引名 ON 表名(column(前缀长度)); 前缀长度: 可以根据索引选择决定,而选择性是指不重复索引值(基数)和数据表记录总数比值,索引选择性越高则查询效率越高...3.尽量选择区分度高列作为索引,尽量建立唯一索引,区分度越高,使用索引效率越高。 4.如果是字符串类型字段,字段长度较长,可以针对于字段特点,建立前缀索引

61340

MySQL面试题 硬核47问

varchar与char区别: char是一种固定长度类型varchar则是一种可变长度类型.varchar(32)中32涵义 : 最多存放32个字节int(20)中20涵义: int(M)中...比如 course_id 在 student_info 表和 course 表中都为 int(11) 类型,而不能一个为 int 另一个为 varchar 类型7、使用类型小创建索引8、使用字符串前缀创建索引创建一张商户表...截取得多了,达不到节省索引存储空间目的;截取得少了,重复内容太多,字段散列度(选择性)会降低。怎么计算不同长度选择性呢?...平衡二叉树相比于二叉查找树来说,查找效率更稳定,总体查找速度也更快。为什么不是平衡二叉树呢?我们知道,在内存在磁盘数据,查询效率快得多。...密码散列,盐,用户身份证号等固定长度字符串,应该使用char而不是varchar存储,这样可以节省空间且提高检索效率。46、Innodb事务实现原理?

1.5K40

一文读懂 MySQL 索引

, PRIMARY KEY (`id`) ); 为什么建表时没有指定主键,MySQL 会默认使用一个隐式字段 ROWID 字段构建聚簇索引?...这里回答了上面的问题,为什么 MySQL 一定要有主键索引,因为主键索引子节点中包含了全部数据 4.3 索引覆盖 CREATE TABLE `user` ( `id` int(11) NOT NULL...同时因为 varchar 是变长字符串,需要额外地字节存放字符长度,共两个字节,此外,name 字段可以为 null 值,null 值单独占用一个字节,加在一起一共 63 个字节 9、ref 当使用索引列等值匹配条件去执行查询时...10、rows 预计需要扫描函数 11、filtered filtered 这个是一个百分值,表里符合条件记录数百分。...5.3.3 尽量使用覆盖索引 覆盖索引,需要查询字段全部包含索引列中,不需要回表查询

63530

SQL优化

查询出比较慢 SQL 语句,然后再通过 Explain 查询 SQL 语句执行计划,最后分析并定位出问题根源,再进行处理 查询日志指的是在 MySQL 中可以通过配置开启查询日志记录功能...简单数据类型操作代价更低,比如:能使用 int 类型就不要使用 varchar 类型,因为 int 类型 varchar 类型查询效率更高 尽量少定义 text 类型 text 类型查询效率很低...整数类型宽度设置 MySQL可以为整数类型指定宽度,例如int(11),实际上并没有意义,它并不会限制值范围,对于存储和计算来说,int(1)和int(20)是相同 VARCHAR和CHAR类型...char类型是定长,而varchar存储可变字符串定长更省空间,但是varchar需要额外1或2个字节记录字符串长度,更新时也容易产生碎片 需要结合使用场景选择:如果字符串列最大长度平均长度大很多...,或者列更新很少,选择varchar较合适;如果要存很短字符串,或者字符串值长度都相同,比如MD5值,或者列数据经常变更,选择使用char类型 DATETIME和TIMESTAMP类型 datetime

73530

MySQL索引(四)常见索引优化手段

索引优化 创建示例表 CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(24) NOT...如果满足查询要求,尽量使用覆盖索引,即索引包含了查询涉及所有字段,避免进行额外数据检索操作。...避免在小基数字段上建立索引:小基数字段指的是字段值较少且有限,即字段有多少不同值。比如性别(男、女)对应字段基数就是 2。...使用前缀索引处理长字符串:对于较大字符串类型字段,可以考虑使用前缀索引。例如,可以只针对字段前几个字符建立索引,以减少磁盘空间占用。...先进行 WHERE 筛选得到数据集一般小很多,再进行排序成本就会小很多。 基于 SQL 查询进行优化:通过监控查询,并针对这些查询进行特定索引优化。根据查询特点,调整索引设计提升性能。

9210

12个MySQL查询原因分析「建议收藏」

如下: 如果给数字加上”, 也就是说,传是一个字符串呢,当然是走索引,如下图: 为什么第一条语句未加单引号就不走索引了呢?...这是因为不加单引号时,是字符串数字比较,它们类型不匹配,MySQL 会做隐式类型转换,把它们转换为浮点数再做比较。隐式类型转换,索引会失效。...2.2 查询条件包含 or,可能导致索引失效 我们还是用这个表结构: CREATE TABLE user ( id int(11) NOT NULL AUTO_INCREMENT, userId varchar...使用 force index 强行选择某个索引 修改你 SQl,引导它使用我们期望索引 优化你业务逻辑 优化你索引,新建一个更合适索引,或者删除误用索引。...那为什么不慢?其实是因为写 redo log 过程是顺序写磁盘。磁盘顺序写会减少寻道等待时间,速度随机写要快很多。 7.3 为什么会出现脏页呢?

1.4K50

阿里面试官必问12个MySQL数据库基础知识,哪些你还不知道?

InnoDB引擎4大特性 存储引擎选择 数据库基础知识 1、为什么使用数据库 (1)数据保存在内存 优点: 存取速度快 缺点: 数据不能永久保存 (2)数据保存在文件 优点: 数据永久保存 缺点:...1)速度内存操作,频繁IO操作。...3、字符串类型,包括VARCHAR、CHAR、TEXT、BLOB VARCHAR用于存储可变长字符串,它比定长类型更节省空间。 VARCHAR使用额外1或2个字节存储字符串长度。...列长度小于255字节时,使用1字节表示,否则使用2字节表示。 VARCHAR存储内容超出设置长度时,内容会被截断。 CHAR是定长,根据定义字符串长度分配足够空间。...使用策略: 对于经常变更数据来说,CHARVARCHAR更好,因为CHAR不容易产生碎片。 对于非常短列,CHARVARCHAR在存储空间上更有效率。

1.4K00
领券