博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
char、varchar 如何设置索引的长度?
阅读量:5932 次
发布时间:2019-06-19

本文共 4398 字,大约阅读时间需要 14 分钟。

char、varchar 类型的字段加索引,都得为索引获取设置一个长度。合适的长度可以节省资源,而不是把整个字段全加上索引。

例如,我要给地址字段建立索引

mysql> desc customer;+--------------+--------------+------+-----+---------+-------+| Field        | Type         | Null | Key | Default | Extra |+--------------+--------------+------+-----+---------+-------+| c_custkey    | int(11)      | NO   | PRI | NULL    |       || c_name       | varchar(25)  | YES  |     | NULL    |       || c_address    | varchar(40)  | YES  |     | NULL    |       || c_nationkey  | int(11)      | YES  | MUL | NULL    |       || c_phone      | char(15)     | YES  |     | NULL    |       || c_acctbal    | double       | YES  |     | NULL    |       || c_mktsegment | char(10)     | YES  |     | NULL    |       || c_comment    | varchar(117) | YES  |     | NULL    |       |+--------------+--------------+------+-----+---------+-------+

#查看c_address 最大长度是多少 40个字符

mysql> select *   from customer order by length(c_address) desc  limit 1;+-----------+--------------------+------------------------------------------+-------------+-----------------+-----------+--------------+---------------------------------+| c_custkey | c_name             | c_address                                | c_nationkey | c_phone         | c_acctbal | c_mktsegment | c_comment                       |+-----------+--------------------+------------------------------------------+-------------+-----------------+-----------+--------------+---------------------------------+|        65 | Customer#000000065 | ak7rtta,tWG,jR,cTSXflW6RVQ3alna3P4Q,zF03 |          23 | 33-733-623-5267 |   8795.16 | AUTOMOBILE   | slyly regular excuses about the |+-----------+--------------------+------------------------------------------+-------------+-----------------+-----------+--------------+---------------------------------+1 row in set (0.25 sec)

#测试合适索引的长度

#计算公式是,当前字符串出现的数量/总量的一个比例,比例在95%左右最合适的。

mysql> select count(distinct left(c_address,20))/count(*) from customer;+---------------------------------------------+| count(distinct left(c_address,20))/count(*) |+---------------------------------------------+|                                      1.0000 |+---------------------------------------------+1 row in set (0.40 sec)
mysql> select count(distinct left(c_address,10))/count(*) from customer;+---------------------------------------------+| count(distinct left(c_address,10))/count(*) |+---------------------------------------------+|                                      1.0000 |+---------------------------------------------+1 row in set (0.37 sec)
mysql> select count(distinct left(c_address,5))/count(*) from customer;+--------------------------------------------+| count(distinct left(c_address,5))/count(*) |+--------------------------------------------+|                                     0.9988 |+--------------------------------------------+1 row in set (0.30 sec)mysql> select count(distinct left(c_address,6))/count(*) from customer;+--------------------------------------------+| count(distinct left(c_address,6))/count(*) |+--------------------------------------------+|                                     0.9999 |+--------------------------------------------+1 row in set (0.31 sec)mysql> select count(distinct left(c_address,4))/count(*) from customer;+--------------------------------------------+| count(distinct left(c_address,4))/count(*) |+--------------------------------------------+|                                     0.9534 |+--------------------------------------------+1 row in set (0.30 sec)

112031_v6bf_2492079.png

mysql> alter table customer  add index(c_address(4));Query OK, 0 rows affected (5.64 sec)Records: 0  Duplicates: 0  Warnings: 0mysql> explain select * from customer where c_address = "j5JsirBM9PsCy0O1m";+----+-------------+----------+------------+------+---------------+-----------+---------+-------+------+----------+-------------+| id | select_type | table    | partitions | type | possible_keys | key       | key_len | ref   | rows | filtered | Extra       |+----+-------------+----------+------------+------+---------------+-----------+---------+-------+------+----------+-------------+|  1 | SIMPLE      | customer | NULL       | ref  | c_address     | c_address | 7       | const |    1 |   100.00 | Using where |+----+-------------+----------+------------+------+---------------+-----------+---------+-------+------+----------+-------------+

转载于:https://my.oschina.net/web256/blog/548905

你可能感兴趣的文章
【转】说说Android中的style和theme
查看>>
iOS开发网络篇—网络编程基础
查看>>
Webpack中的sourcemap
查看>>
正则中需要转义的特殊字符
查看>>
CentOS安装教程(VMware)
查看>>
摄像头工作原理【转】
查看>>
【Zookeeper】源码分析之服务器(五)之ObserverZooKeeperServer
查看>>
Spring Cloud构建微服务架构(四)分布式配置中心
查看>>
Makefile学习之路——1
查看>>
《图解Spark:核心技术与案例实战》作者经验谈
查看>>
Yii使用笔记 2
查看>>
Ubuntu16.04下编译android6.0源码
查看>>
MySql批量插入数据
查看>>
微信开发-点击链接自己主动加入关注
查看>>
The Relationship Between Layers and Views
查看>>
算法笔记之动态规划
查看>>
2801 LOL-盖伦的蹲草计划
查看>>
GridView数据绑定控件的模版列时设置显示的格式
查看>>
mac下配置adb
查看>>
php利用curl获取网页title内容
查看>>