当前位置: 首页 > news >正文

Mysql建表和索引使用规范

原文地址:Mysql建表和索引使用规范 作者:tt_lan2003

一、 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条件的语句中执行效率没有SELECTCOUNT(col_name)快,但是在有where条件的语句中执行效率要快。

十、在where条件中多个and的条件中,必须都是一个多列索引的key_part属性而且必须包含key_part1。各自单一索引的话,只使用遍历最少行的那个索引。

十一、 在where条件中多个or的条件中,每一个条件,都必须是一个有效索引。

十二、 ORDER BY 后面的条件必须是同一索引的属性,排序顺序必须一致(比如都是升序或都是降序)。

十三、 所有GROUP BY列引用同一索引的属性,并且索引必须是按顺序保存其关键字的。

十四、 JOIN 索引,所有匹配ON和where的字段应建立合适的索引。

十五、 对智能的扫描全表使用FORCE INDEX告知MySQL,使用索引效率更高。

十六、 定期ANALYZE TABLE tbl_name为扫描的表更新关键字分布 。

十七、 定期使用慢日志检查语句,执行explain,分析可能改进的索引。

十八、条件允许的话,设置较大的key_buffer_size和query_cache_size的值(全局参数),和sort_buffer_size的值(session变量,建议不要超过4M)。


备注

主键的命名采用如下规则:

主键名用pk_开头,后面跟该主键所在的表名。主键名长度不能超过30个字符。如果过长,可对表名进行缩写。缩写规则同表名的缩写规则。主键名用小写的英文单词来表示。

 

外键的命名采用如下规则:

外键名用fk_开头,后面跟该外键所在的表名和对应的主表名(不含t_)。子表名和父表名自己用下划线(_)分隔。外键名长度不能超过30个字符。如果过长,可对表名进行缩写。缩写规则同表名的缩写规则。外键名用小写的英文单词来表示。

 

索引的命名采用如下规则:

1)索引名用小写的英文字母和数字表示。索引名的长度不能超过30个字符。

2)主键对应的索引和主键同名。

3)唯一性索引用uni_开头,后面跟表名。一般性索引用ind_开头,后面跟表名。

4)如果索引长度过长,可对表名进行缩写。缩写规则同表名的缩写规则

 

index 相关语法

例:

CREATE INDEX log_url ON logaudit_log(url);
show index from logaudit_log
drop index log_request_time on logaudit_log

相关文章:

  • SEO优化技巧nbsp;如何优化…
  • Webnbsp;研发模式演变
  • Javascript模块化编程(一):模块…
  • Javascript模块化编程(二):AMD…
  • Javascript模块化编程(三):requ…
  • Minify压缩和削减CSS和JS
  • 如何写一个Jquerynbsp;的Plugin插件
  • 使用CSSnbsp;3创建不规则图形
  • 4人卖睡衣年赚7000万!绝对…
  • 我所理解的技术领导力
  • 问问题的艺术
  • 程序员发展十分重要的12条日常习惯
  • 暗时间
  • 说说程序员与博客
  • 自由职业者:如何找到你的第…
  • JS 中的深拷贝与浅拷贝
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • extjs4学习之配置
  • Hibernate最全面试题
  • HTML-表单
  • HTTP中的ETag在移动客户端的应用
  • Python_OOP
  • Redis字符串类型内部编码剖析
  • Ruby 2.x 源代码分析:扩展 概述
  • Spring声明式事务管理之一:五大属性分析
  • 前端js -- this指向总结。
  • 前端性能优化——回流与重绘
  • 小程序 setData 学问多
  • 用jquery写贪吃蛇
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​如何防止网络攻击?
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #FPGA(基础知识)
  • ${factoryList }后面有空格不影响
  • (1)bark-ml
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (层次遍历)104. 二叉树的最大深度
  • (四)Linux Shell编程——输入输出重定向
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET Framework 4.6.2改进了WPF和安全性
  • .Net Web窗口页属性
  • /var/lib/dpkg/lock 锁定问题
  • ::before和::after 常见的用法
  • [@Controller]4 详解@ModelAttribute
  • [16/N]论得趣
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [Android Studio 权威教程]断点调试和高级调试
  • [bbk5179]第66集 第7章 - 数据库的维护 03
  • [Codeforces] probabilities (R1600) Part.1
  • [Docker]三.Docker 部署nginx,以及映射端口,挂载数据卷
  • [github配置] 远程访问仓库以及问题解决