建表注意

、建议字段定义为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)
  • 索引的优点
.可以通过建立唯一索引或者主键索引,保证数据库表中每一行数据的唯一性.
.建立索引可以大大提高检索的数据,以及减少表的检索行数
.在表连接的连接条件 可以加速表与表直接的相连
.在分组和排序字句进行数据检索,可以减少查询时间中 分组 和 排序时所消耗的时间(数据库的记录会重新排序)
.建立索引,在查询中使用索引 可以提高性能
  • 索引的缺点
.在创建索引和维护索引 会耗费时间,随着数据量的增加而增加
.索引文件会占用物理空间,除了数据表需要占用物理空间之外,每一个索引还会占用一定的物理空间
.当对表的数据进行 INSERT,UPDATE,DELETE 的时候,索引也要动态的维护,这样就会降低数据的维护速度,
(建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快)。
  • 需要注意的地方
.在经常需要搜索的列上,可以加快索引的速度
.在表与表的而连接条件上加上索引,可以加快连接查询的速度
.在经常需要排序(order by),分组(group by)和的distinct 列上加索引 可以加快排序查询的时间,
(单独order by 用不了索引,索引考虑加where 或加limit)
.在一些where 之后的 < <= > >= BETWEEN IN 以及某个情况下的like 建立字段的索引(B-TREE)
.like语句的 如果你对nickname字段建立了一个索引.当查询的时候的语句是 nickname like '%ABC%'
那么这个索引讲不会起到作用.而nickname like 'ABC%' 那么将可以用到索引
.索引不会包含NULL列,如果列中包含NULL值都将不会被包含在索引中,
复合索引中如果有一列含有NULL值那么这个组合索引都将失效,一般需要给默认值0或者 ' '字符串
.使用短索引,如果你的一个字段是Char()或者int(),在创建索引的时候指定前缀长度 比如前10个字符
(前提是多数值是唯一的..)那么短索引可以提高查询速度,并且可以减少磁盘的空间,也可以减少I/0操作.
.不要在列上进行运算,这样会使得mysql索引失效,也会进行全表扫描
.选择越小的数据类型越好,因为通常越小的数据类型通常在磁盘,内存,cpu,缓存中 占用的空间很少,处理起来更快
  • 什么情况不需要索引
.查询中很少使用到的列 不应该创建索引,如果建立了索引然而还会降低mysql的性能和增大了空间需求.
.很少数据的列也不应该建立索引,比如 一个性别字段 0或者1,在查询中
,结果集的数据占了表中数据行的比例比较大,mysql需要扫描的行数很多,增加索引,并不能提高效率
.定义为text和image和bit数据类型的列不应该增加索引,
.当表的修改(UPDATE,INSERT,DELETE)操作远远大于检索(SELECT)操作时不应该创建索引,这两个操作是互斥的关系

最新文章

  1. React Native 环境搭建
  2. Redis之个人简单理解
  3. IOS 断点下载
  4. imx6 kernel clock
  5. VBA中自定义类和事件的(伪)注册
  6. 阅读&lt;构建之法&gt;第13、14、15、16、17章 与 《一个程序员的生命周期》读后感
  7. ios 判断空字符串
  8. 【模拟】FOJ 2244 Daxia want to buy house
  9. linux中的fork函数的基本用法
  10. tomcat 设置session 时间
  11. Effective C++_笔记_条款08_别让异常逃离析构函数
  12. 远程数据client交换器
  13. LeetCode 257. Binary Tree Paths (二叉树路径)
  14. javascript之BOM编程Screen(屏幕)对象
  15. 想要薪资20-30K,Python程序员认真敲代码就够了!
  16. Linux常见问题汇总
  17. ServerSocket实现超简单HTTP服务器
  18. maven build resources
  19. IOP知识点(3)-Modal.show
  20. CTF PHP文件包含--session

热门文章

  1. 在windows下安装flex和bison、GCC
  2. LDP协议详解-上
  3. 【Luogu】P3195玩具装箱(斜率优化DP)
  4. 【Luogu】P1005矩阵取数游戏(高精度+DP)
  5. BZOJ 4719 [Noip2016]天天爱跑步 ——树链剖分
  6. 【leetcode dp】Dungeon Game
  7. Nk 1214 Relatives(欧拉函数)
  8. 【HDOJ5978】To begin or not to begin(概率)
  9. 在Fedora 22下安装配置RealVNC Server 5.2.3的经验总结
  10. Perl、PHP、Python、Java和Ruby的比较