建表注意

1、建议字段定义为NOT NULL

搜索引擎

MyISAM
InnoDB
区别

InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。

sql优化

任何地方都不要使用 select * from t ,用具体的字段列表代替“*”
尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。
尽量避免大事务操作,提高系统并发能力。

索引

  • 索引的创建
普通索引
CREATE INDEX IndexName ON `TableName`(`字段名`(length))
ALTER TABLE TableName ADD INDEX IndexName(`字段名`(length))
组合索引
CREATE INDEX IndexName On `TableName`(`字段名`(length),`字段名`(length),...);
全文索引
ALTER TABLE tablename ADD FULLTEXT(column1, column2)

  • 索引的优点
1.可以通过建立唯一索引或者主键索引,保证数据库表中每一行数据的唯一性.
2.建立索引可以大大提高检索的数据,以及减少表的检索行数
3.在表连接的连接条件 可以加速表与表直接的相连
4.在分组和排序字句进行数据检索,可以减少查询时间中 分组 和 排序时所消耗的时间(数据库的记录会重新排序)
5.建立索引,在查询中使用索引 可以提高性能

  • 索引的缺点
1.在创建索引和维护索引 会耗费时间,随着数据量的增加而增加
2.索引文件会占用物理空间,除了数据表需要占用物理空间之外,每一个索引还会占用一定的物理空间
3.当对表的数据进行 INSERT,UPDATE,DELETE 的时候,索引也要动态的维护,这样就会降低数据的维护速度,
(建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快)。

  • 需要注意的地方
1.在经常需要搜索的列上,可以加快索引的速度
2.在表与表的而连接条件上加上索引,可以加快连接查询的速度
3.在经常需要排序(order by),分组(group by)和的distinct 列上加索引 可以加快排序查询的时间,
(单独order by 用不了索引,索引考虑加where 或加limit)
4.在一些where 之后的 < <= > >= BETWEEN IN 以及某个情况下的like 建立字段的索引(B-TREE)
5.like语句的 如果你对nickname字段建立了一个索引.当查询的时候的语句是 nickname like '%ABC%'
那么这个索引讲不会起到作用.而nickname like 'ABC%' 那么将可以用到索引
6.索引不会包含NULL列,如果列中包含NULL值都将不会被包含在索引中,
复合索引中如果有一列含有NULL值那么这个组合索引都将失效,一般需要给默认值0或者 ' '字符串
7.使用短索引,如果你的一个字段是Char(32)或者int(32),在创建索引的时候指定前缀长度 比如前10个字符
(前提是多数值是唯一的..)那么短索引可以提高查询速度,并且可以减少磁盘的空间,也可以减少I/0操作.
8.不要在列上进行运算,这样会使得mysql索引失效,也会进行全表扫描
9.选择越小的数据类型越好,因为通常越小的数据类型通常在磁盘,内存,cpu,缓存中 占用的空间很少,处理起来更快

  • 什么情况不需要索引
1.查询中很少使用到的列 不应该创建索引,如果建立了索引然而还会降低mysql的性能和增大了空间需求.
2.很少数据的列也不应该建立索引,比如 一个性别字段 0或者1,在查询中
,结果集的数据占了表中数据行的比例比较大,mysql需要扫描的行数很多,增加索引,并不能提高效率
3.定义为text和image和bit数据类型的列不应该增加索引,
4.当表的修改(UPDATE,INSERT,DELETE)操作远远大于检索(SELECT)操作时不应该创建索引,这两个操作是互斥的关系

转载于:https://www.cnblogs.com/zhangyaxiao/p/7117698.html

sql建表,建索引注意事项相关推荐

  1. Oracle 学习之建表、索引、同义词以及SQL优化

    Oracle 学习之建表.索引.同义词以及SQL优化: 一.Oracle 建表: 1.建表语句: --创建表 create table test ( id varchar2(200) primary ...

  2. 轻松取得建表和索引的DDL语句

    我们都知道在9i之前,要想获得建表和索引的语句是一件很麻烦的事.我们通常的做法都是通过export with rows=no来得到,但它的输出因为格式的问题并不能直接拿来用.而另一种方法就是写复杂的脚 ...

  3. mysql建表2个索引是啥意思_Mysql建表与索引使用规范详解

    本篇文章是对Mysql建表和索引使用规范进行了详细的分析介绍,需要的朋友参考下 一. MySQL建表,字段需设置为非空,需设置字段默认值. 二. MySQL建表,字段需NULL时,需设置字段默认值,默 ...

  4. mysql 建表建索引

    Mysql建表与索引使用规范整理 一,设计表规范: MySQL建表,字段需设置为非空,需设置字段默认值: MySQL建表,字段需NULL时,需设置字段默认值,默认值不为NULL: MySQL建表,如果 ...

  5. linux shell脚本执行sql语句建表建库

    linux shell脚本执行sql语句建表建库 1. 创建sql脚本 2. 创建shll脚本 1. 创建sql脚本 创建contract_ddl.sql -- 创建数据库contract_user ...

  6. [NewLife.XCode]反向工程(自动建表建库大杀器)

    NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示 ...

  7. xcode修改时间后就要重新编译_[NewLife.XCode]反向工程(自动建表建库大杀器)

    NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示 ...

  8. Mysql - Mysql的建表建库

    目录 Mysql5.7官方参考文档:MySQL :: MySQL 5.7 Reference Manual SQL语言说明文档: 数据库里存在的包含关系: Mysql建表建库: 1.Mysql如何建库 ...

  9. SQL Server 表和索引存储结构

    SQL Server 表和索引存储结构 杜飞 在上一篇文章中,我们介绍了SQL Server数据文件的页面类型,系统通过96个字节的头部信息和系统表从逻辑层面上将表的存储结构管理起来,具体到表的存储结 ...

  10. mysql 建表时建立索引_mysql 分享建表和索引的几点规范

    一. MySQL建表,字段需设置为非空,需设置字段默认值. 二. MySQL建表,字段需NULL时,需设置字段默认值,默认值不为NULL. 三. MySQL建表,如果字段等价于外键,应在该字段加索引. ...

最新文章

  1. 计图MPI分布式多卡
  2. unity发布安卓黑屏_Unity将携十余爆款新游和多个独立游戏亮相ChinaJoy 2020
  3. 加快Tensorflow和Keras图像数据集的训练速度
  4. 大话风险投资的风险-不只是独角戏(上)
  5. HDU:4185-Oil Skimming
  6. Linux命令:bash脚本编程--脚本
  7. 前端做后台管理系统有前途吗_关于后台管理系统前端项目的思考
  8. 我们每天努力上班赚钱,财富离我们很远
  9. Spanning-Tree Portfast
  10. 分享一下海康威视古老的播放器源码
  11. AXE模式隐私号基于语音流分析的用户接听识别方案
  12. 易语言MYQQ框架群管机器人如何获取用户信息
  13. k8s 集群部署springcloud 多应用
  14. 【初赛】初赛提纲¿ 错题集
  15. linux xia复制命令,Linux常用命令整理
  16. CAtia_打开提示:许可证过期怎么办
  17. JSP与Servlet 基础知识
  18. Paleo In A Kitchen: Caveman Cooking Masterclass
  19. Allocate exception for servlet LoginServletjava.lang.ClassNotFoundException:
  20. 一起撸个简单粗暴的Tv应用主界面的网格布局控件(下)

热门文章

  1. VMware虚拟机搭MAC系统
  2. CNN网络加速--Performance Guaranteed Network Acceleration via High-Order Residual Quantization
  3. 空间映射网络--Spatial Transformer Networks
  4. 【Harvest源码分析】GetWaveformAndSpectrumSub函数
  5. 装管家婆系统要开启那些服务器,管家婆服务器维护注意的一些事项?
  6. android 启动app过程,Android P APP冷启动过程全解析(之四)
  7. java 跳表_数据结构跳表学习并用Java实现
  8. 7-6 统计字符串中数字字符的个数_洛谷 || 标题统计(C语言)
  9. oracle 游标 内联,oracle – EXEC_SQL,EXECUTE IMMEDIATE,DBMS_SQL和内联SQL之间的区别
  10. PHP中htmlentities跟htmlspecialchars的区别