mysql 建表时创建唯一索引
Mysql建表与索引使用规范整理
一,设计表规范:
MySQL建表,字段需设置为非空,需设置字段默认值;
MySQL建表,字段需NULL时,需设置字段默认值,默认值不为NULL;
MySQL建表,如果字段等价于外键,应在该字段加索引;
MySQL建表,不同表之间的相同属性值的字段,列类型,类型长度,是否非空,是否默认值,需保持一致,否则无法正确使用索引进行关联对比;
MySQL使用时,一条SQL语句只能使用一个表的一个索引。所有的字段类型都可以索引,多列索引的属性最多15个;
如果可以在多个索引中进行选择,MySQL通常使用找到最少行的索引,索引唯一值最高的索引;
建立索引index(part1,part2,part3),相当于建立了 index(part1),index(part1,part2)和index(part1,part2,part3)三个索引;
MySQL针对like语法必须如下格式才使用索引;
SELECT * FROM t1 WHERE key_col LIKE ‘ab%’ ;
SELECT COUNT(*) 语法在没有where条件的语句中执行效率没有SELECT COUNT(col_name)快,但是在有where条件的语句中执行效率要快;
在where条件中多个and的条件中,必须都是一个多列索引的key_part属性而且必须包含key_part1。各自单一索引的话,只使用遍历最少行的那个索引;
在where条件中多个or的条件中,每一个条件,都必须是一个有效索引;
ORDER BY 后面的条件必须是同一索引的属性,排序顺序必须一致(比如都是升序或都是降序);
所有GROUP BY列引用同一索引的属性,并且索引必须是按顺序保存其关键字的;
14.、 JOIN 索引,所有匹配ON和where的字段应建立合适的索引;
对智能的扫描全表使用FORCE INDEX告知MySQL,使用索引效率更高。
定期ANALYZE TABLE tbl_name为扫描的表更新关键字分布 ;
定期使用慢日志检查语句,执行explain,分析可能改进的索引;
条件允许的话,设置较大的key_buffer_size和query_cache_size的值(全局参数),和sort_buffer_size的值(session变量,建议不要超过4M);
二,命名规范 :
1.主键的命名采用如下规则:
主键名用pk_开头,后面跟该主键所在的表名。主键名长度不能超过30个字符。如果过长,可对表名进行缩写。缩写规则同表名的缩写规则。主键名用小写的英文单词来表示。
2.外键的命名采用如下规则:
外键名用fk_开头,后面跟该外键所在的表名和对应的主表名(不含t_)。子表名和父表名自己用下划线(_)分隔。外键名长度不能超过30个字符。如果过长,可对表名进行缩写。缩写规则同表名的缩写规则。外键名用小写的英文单词来表示。
3.索引的命名采用如下规则:
1)索引名用小写的英文字母和数字表示。索引名的长度不能超过30个字符;
2)主键对应的索引和主键同名;
3)唯一性索引用uni_开头,后面跟表名。一般性索引用ind_开头,后面跟表名;
4)如果索引长度过长,可对表名进行缩写。缩写规则同表名的缩写规则;
5)索引基本语法;
CREATE INDEX 索引名称 ON 表名(字段);
show index from 表名 ;
drop index 索引名称 on 表名;
6)唯一值越多的字段,使用索引的效果越好。设置联合索引时,唯一值越多的,越应该放在“左侧”;
三,SQL语句优化规范 :
使用mysql explain 对sql执行效率进行检测 ,explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。
1) 使用方法:在select语句前加上explain即可;
2) explain 分析结果形式如下:
table | type | possible_keys | key | key_len | ref | rows | Extra
explain 分析结果形式中各属性含义;
table :显示这一行的数据是关于哪张表的;
type :这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL;
possible_keys :显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句;
key :实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引;
key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好;
ref:显示索引的哪一列被使用了,如果可能的话,是一个常数;
rows:MYSQL认为必须检查的用来返回请求数据的行数;
Extra :返回的描述的意义 尽量使用 "inner join " 查询替换子查询条件中的 "in " ,防止由于数据量过大,引发数据库挂起问题 ;
3.使用索引应注意问题:
1)查询语句的where条件后边使用 “!=”或“<>”时,索引不生效,和普通字段一样;
2)查询语句的where条件后边使用字符串函数或其他函数,索引不生效,和普通字段一样;
3)使用连接(join)查询时,只有在主键和外键的数据类型相同时索引才会生效;
4)查询语句的where条件后边使用Like关键字应注意,like ‘%jx%’ 和 like '%jx’方式索引均不生效, like 'jx%'方式索引生效;
5)InnoDB数据表不支持全文索引;
mysql 建表时创建唯一索引相关推荐
- mysql建表时错误1075_navicat出现错误1075怎么办
MYSQL中AUTO_INCREMENT会在新记录插入表中时生成一个唯一的数字.希望在每次插入新记录时,自动地创建主键字段的值,可以在表中创建一个 auto-increment 字段. mysql创建 ...
- mysql建表时主键_mysql建表时设置主键的方法
mysql建表时设置主键的方法 发布时间:2020-10-10 15:17:28 来源:亿速云 阅读:119 作者:小新 mysql建表时设置主键的方法?这个问题可能是我们日常学习或工作经常见到的.希 ...
- mysql 建表时建立索引_mysql 分享建表和索引的几点规范
一. MySQL建表,字段需设置为非空,需设置字段默认值. 二. MySQL建表,字段需NULL时,需设置字段默认值,默认值不为NULL. 三. MySQL建表,如果字段等价于外键,应在该字段加索引. ...
- Python3 使用 pymysql 连接 MySQL 建表时出现 Warning3719 UTF8 警告
在学习 Python3 爬虫关系型数据库储存时,利用 pymysql 连接 MySQL 建表,测试用的代码如下,第一句 SQL 用于获取当前 MySQL 的版本信息,第二句 SQL 执行创建 spid ...
- mysql建表时外检怎么创建_MySQL创建表时加入的约束以及外键约束的的意义
1,创建表时加入的约束 a) 非空约束,not null b) 唯一约束,unique c) 主键约束,primary key d) 外键约束,foreign key 1,非空约束,针对某个字段设置其 ...
- MySQL 建表时的四种key
mysql的key和index多少有点令人迷惑,这实际上考察对数据库体系结构的了解的. 1 key 是数据库的物理结构,它包含两层意义,一是约束(偏重于约束和规范数据库的结构完整性),二是索引(辅助查 ...
- mysql建表时主键_mysql建表时怎么设置主键?
设置方法:在"CREATE TABLE"语句中,通过"PRIMARY KEY"关键字来指定主键,语法格式"字段名 数据类型 PRIMARY KEY [ ...
- MySQL建表时Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP
问题描述:在利用MySQL语句建立表结构时出现了Error Code : 1293 Incorrect table definition; there can be only one TIMESTAM ...
- mysql插入记录时违反唯一索引的处理
如果表中定义了唯一索引,而我们插入记录要避免违反这个约束,该怎么弄? 最原始的办法,是先查找一下,确认不违反,才插入.现在都用ORM框架来操作数据库,搞不好还要分成两个步骤,调用2个方法才能完成.或者 ...
最新文章
- GBK字符集和UTF8字符集的转换C++
- 【DIY】震精!他居然用esp8266做出掌上游戏机......恐龙跑酷游戏还能这样玩!请广泛转发!...
- 过滤输入字符串中的危险字符
- jmeter压测过程中内存溢出
- MongoDB 设置权限认证
- android线性布局快捷键,【整理】Android图形界面知识学习与总结之:Linear Layout线性布局...
- java map 泛型 反射_Java通过反射读取泛型
- 工厂模式,简单工厂模式,抽象工厂模式三者有什么区别
- 多线程爬取图片 -Java
- html怎么让鼠标自动移动位置,手把手教你编作弊软件之 鼠标自动移动/点击
- python数据分析有哪些模型-python数据挖掘的基本流程有哪些?
- 记一次UDP的sendto函数错误解决
- Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
- Proxy-NCA Loss、Proxy Anchor Loss
- IKBC键盘win键失灵解决方法
- win10x64下安装anaconda、配置tensorflow并在jupyter和pycharm中使用tf
- 推荐几款HTML5开发工具
- python中flatten_Python中flatten用法
- [MySQL]初始JDBC编程
- 智能金融再突破·TAI让反洗钱更快一步
热门文章
- [附源码]计算机毕业设计JAVA个性化新闻推荐系统
- c语言输入一行未知个数数字存入数组
- 农历生日和阳历生日同一天是哪一天
- ValueError: Exception encountered when calling layer “max_pooling2d_1“ (type MaxPooling2D).
- 闲鱼上哪些商品抢手?Python 分析后告诉你
- 麒麟980可以升级鸿蒙吗,这五部麒麟980手机确定能升鸿蒙OS,其中有你吗?
- 101 Fabulous Freebies(101个卓越的免费软件!)
- 1年20国!ofo用共享单车能否冲破海外流量魔障
- 回答读者朋友的2道题
- 你好请问计算机房在几楼,电梯机房一般在几楼