MySQL索引和字段类型,字段长度
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL索引和字段类型,字段长度相关的知识,希望对你有一定的参考价值。
参考技术A 首先是两个表, user_info 和 user_identify_info ,这两个表通过 user_id 关联。user_info 中 user_id 字段是int(11)类型,主键索引
user_identify_info 中 user_id 是varchar类型,普通索引
执行结果如图,未使用到索引
将 user_identify_info 字段改为int(11)或者bigint类型,使用到索引
最后查到
1、字段是varchar类型,参数是int类型,不走索引
2、字段是varchar类型,参数是字符串,走索引
3、字段是int类型,参数是int类型,走索引
4、字段是int类型,参数是字符串,走索引
添加列delivery_address 字段扩展到1000
为这个字段添加单列索引,报异常出来,索引最大长度是3072 bytes
mysql5.7不报错,但会自动将索引长度限制在768
mysql8单列索引最长也是768
复合索引总长度不能超过768
MySQL优化
MySQL优化
- 表方面
(1) 创建字段时选取合适的长度,例:年龄字段用tinyint或者smallint即可
(2) 数据类型选取优先度 数字>字符串>text
(3) 使用数字代替枚举和日期类型
(4) 字段使用非空设定(值为null时索引不会包含该数据)
- 索引方面
(1) 索引可以加快数据增删改查的速度,但是索引会占据大量的硬盘空间以及在更新数据时会花费大量的时间更新索引,这是一种使用空间换取时间的方法。
(2) 根据索引特性,创建索引要采取少而精的思路。既能使用一条索引能解决问题的话就不要创建两条,能使用普通、唯一索引解决的话就不要使用联合索引。
(3) 创建索引时注意索引使用的最左原则,例:创建联合索引abc,使用索引abc,ab,a是可以使用索引,其他的只(ac,acb)部分使用索引或者不能使用索引
(4) 创建索引是采取区分度大的字段创建索引
(5) 同等情况下数字类型的字段要优于字符串型字段
- Sql语句方面
(1) 创建sql语句尽量使用索引,并准守索引的最左原则
(2) 使用join代替零时建表
(3) 如果有索引ab,那么a or b b的那一部分查询不会使用索引,必要的话可以建立b的索引
(4) 使用like查询是 条件前边不要使用%,可能会使索引失效
(5) 条件左边不要使用运算函数,会使索引失效
(6) 在查询中避免使用函数,提高数据库查询效率
(7) 不要使用!=,no等否操作,会使索引失效
(8) 使用in,between,union等方式优化and操作
(9) 避免隐式转换,既用’1’查询数字1,可能会导致索引失效
(10) 使用explain去分析sql语句的性能
(11) 优化limit查询,limit的数越大io占用越多
- 分表分库分区和集群方面
(1) 分表提高了单标的并发能量和磁盘的io性能。分区提高了磁盘的io
(2) 分库主要是为了突破的单机的性能限制
(3) 使用集群可以加强服务的可用性,提高并发性
① 双主 高可用
② Mha pxc高可用 高并发
以上是关于MySQL索引和字段类型,字段长度的主要内容,如果未能解决你的问题,请参考以下文章