//varchar
MySQL 5.0 版本以上,VARCHER(n)中的 n 指的是 n 个字符(英文字母、汉字、符号都是字符)。
无论存放的是数字、字母还是UTF8汉字,都可以存放50个。
//索引长度
utf-8 一个中文3个字节 key word(4)是4个中文 ,3*4=12 相当于建立12字节长度的索引
如果是varchar 会发生相应变化+1到2,所以keylen为14
key leng
4倍关系
2进制-16进制-utf-8编码-汉字
128 32
//数据类型
decimal(20,6) 保留6位小数;算上小数共计20位
//select
#清除查询缓存
RESET QUERY CACHE;
//sql执行状态
#数据库执行sql的各种属性值的大小
show VARIABLES like '%size%';
#将此值设置为on mysql会自动为每一条查询生成详细请求
show VARIABLES LIKE 'profiling';
set 'profiling' = on
#查看执行过的查询 其中有数字id
show PROFILES;
#查看2个查询的执行状态属性
SHOW PROFILE for QUERY 2;
//库
show databases;
//表
#查看所有表
show TABLES;
#查看建表语句
show create TABLE tab1;
#列出字段
desc table_name;
#更改字段
ALTER TABLE address MODIFY column `NAME` VARCHAR(1) NOT NULL DEFAULT '';
//注释
ALTER TABLE table_name COMMENT='这是表的注释';
ALTER table table_name MODIFY `column_name` datetime DEFAULT NULL COMMENT '这是字段的注释'
//索引操作
show index from product;
#指定索引名称添加索引,并设置索引长度
alter table product add index type_index (`type`(4)) ;
#添加复合索引
alter table product add index name_type_index (`NAME`,`type`) ;
#删除索引
alter table product DROP INDEX `type_index`;
#创建索引是可能用到 得到最长的数据 对于使用索引时是个重要参数
select * from product ORDER BY LENGTH(detail) LIMIT 1;
#去重查询第一个汉字个数 去重后的第一个数的数量 为a ,查询总数为b a/b得到占比,对于使用索引时是个重要参数
select COUNT(DISTINCT LEFT(detail,1)) from product;
#添加列 建立伪hash字段
ALTER TABLE product ADD crcurl int UNSIGNED not null DEFAULT 0;
UPDATE product SET crcurl = CRC32(`detail`) WHERE detail is not null;
alter table product add index detail_index (`detail`(16)) ;
alter table product add index crcurl_index (crcurl) ;
#从新规整数据和索引文件
ALTER TABLE product ENGINE myisam;
OPTIMIZE TABLE product;
#列出字段
//调优
当 查询靠后的数据>10万 会导致特别慢
limit,offset是先从上到下全表扫描 ,扫描了之前所有没用的
//表的优化与列的类型选择
1.整型>datetime>varchar>blob #原因:整型和time运算快节省空间 varcahr需要考虑字符集转换与排序时的校对集(控制字符排序谁优先的) blob无法使用内存临时表
2.够用就行,不用慷慨 #原因;空间大浪费内存导致查询变慢
3.尽量避免用null #原因: null不利于索引,null实际占据空间更大 NULL 和其他 + - * / 都为null
//sql执行顺序,想要优化SQL,必须清楚知道SQL的执行顺序,这样再配合explain才能事半功倍!完整SQL语句
select distinct
<select_list>
from
<left_table><join_type>
join <right_table> on <join_condition>
where
<where_condition>
group by ## group by 会区分 null 和 空字符串
<group_by_list>
having
<having_condition>
order by
<order_by_condition>
limit <limit number>
SQL执行顺序
1、from <left_table><join_type>
2、on <join_condition>
3、<join_type> join <right_table>
4、where <where_condition>
5、group by <group_by_list>
6、having <having_condition>
7、select
8、distinct <select_list>
9、order by <order_by_condition>
10、limit <limit_number>