数据库建立索引常用的规则如下:

1、表的主键、外键必须有索引;

2、数据量超过300的表应该有索引;

3、经常与其他表进行连接的表,在连接字段上应该建立索引;

4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;

5、索引应该建在选择性高的字段上;

6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;

7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:

A、正确选择复合索引中的主列字段,一般是选择性较好的字段;

B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否

极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;

C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;

D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;

E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;

8、频繁进行数据操作的表,不要建立太多的索引;

9、删除无用的索引,避免对执行计划造成负面影响;

以上是一些普遍的建立索引时的判断依据。

索引的建立必须慎重,对每个索引的必要性都应该经过仔细分析,要有建立的依据。

因为太多的索引与不充分、不正确的索引对性能都毫无益处:在表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销。 另外,过多的复合索引,在有单字段索引的情况下,一般都是没有存在价值的;相反,还会降低数据增加删除时的性能,特别是对频繁更新的表来说,负面影响更大。

总的来说,小型表肯定不建索引,

或者数据库记录在亿条数据级以上,还是建议使用非关系型数据库。

还有些特殊字段的数据库,比如BLOB,CLOB字段肯定也不适合建索引。

其实这个问题更感觉偏向于做软件项目的一种经验。

对千万级MySQL数据库建立索引的事项及提高性能的手段

一、注意事项:

首先,应当考虑表空间和磁盘空间是否足够。我们知道索引也是一种数据,在建立索引的时候势必也会占用大量表空间。因此在对一大表建立索引的时候首先应当考虑的是空间容量问题。

其次,在对建立索引的时候要对表进行加锁,因此应当注意操作在业务空闲的时候进行。

二、性能调整方面:

首当其冲的考虑因素便是磁盘I/O。物理上,应当尽量把索引与数据分散到不同的磁盘上(不考虑阵列的情况)。逻辑上,数据表空间与索引表空间分开。这是在建索引时应当遵守的基本准则。

其次,我们知道,在建立索引的时候要对表进行全表的扫描工作,因此,应当考虑调大初始化参数db_file_multiblock_read_count的值。一般设置为32或更大。

再次,建立索引除了要进行全表扫描外同时还要对数据进行大量的排序操作,因此,应当调整排序区的大小。

9i之前,可以在session级别上加大sort_area_size的大小,比如设置为100m或者更大。

9i以后,如果初始化参数workarea_size_policy的值为TRUE,则排序区从pga_aggregate_target里自动分配获得。

最后,建立索引的时候,可以加上nologging选项。以减少在建立索引过程中产生的大量redo,从而提高执行的速度。

MySql在建立索引优化时需要注意的问题

设计好MySql的索引可以让你的数据库飞起来,大大的提高数据库效率。设计MySql索引的时候有一下几点注意:

1,创建索引

对于查询占主要的应用来说,索引显得尤为重要。很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索引导致。如果不加索引的话,那么查找任何哪怕只是一条特定的数据都会进行一次全表扫描,如果一张表的数据量很大而符合条件的结果又很少,那么不加索引会引起致命的性能下降。但是也不是什么情况都非得建索引不可,比如性别可能就只有两个值,建索引不仅没什么优势,还会影响到更新速度,这被称为过度索引。

2,复合索引

比如有一条语句是这样的:select * from users where area=’beijing’ and age=22;

如果我们是在area和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效

率,但是如果在area、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(area, age,

salary)的复合索引,那么其实相当于创建了(area,age,salary)、(area,age)、(area)三个索引,这被称为最佳左前缀

特性。因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。

3,索引不会包含有NULL值的列

只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。

4,使用短索引

对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的 列,如果在前10 个或20 个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。

5,排序的索引问题

mysql查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。

6,like语句操作

一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “�a%” 不会使用索引而like “aaa%”可以使用索引。

7,不要在列上进行运算

select * from users where

YEAR(adddate)

8,不使用NOT IN和操作

NOT IN和操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替,id3则可使用id>3 or id

mysql date建索引有用吗_Mysql索引分析:适合建索引?不适合建索引?【转】相关推荐

  1. 适合建索引?不适合建索引?分析

    数据库建立索引常用的规则如下: 1.表的主键.外键必须有索引: 2.数据量超过300的表应该有索引: 3.经常与其他表进行连接的表,在连接字段上应该建立索引: 4.经常出现在Where子句中的字段,特 ...

  2. mysql唯一索引一个表_mysql一个表可以有几个唯一索引?

    匿名用户 1级 2017-12-01 回答 创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复.唯一索引可以有多个但索引列的值必须唯一,索引列的值允许有空值.如果能确定某个数据列将只包 ...

  3. 哪些情况不适合建索引

    哪些情况不要创建索引 1. 表记录太少 2. 经常增删改的表 Why:提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT.UPDATE和DELETE.因为更新表时,MySQL不仅要保存数 ...

  4. mysql 分组查出来横向展示_MySQL汇总分析(group by)

    制作表格的代码在这里找哦! https://zhuanlan.zhihu.com/p/162696033​zhuanlan.zhihu.com stu表:学生学号.学生姓名.学生年龄.学生性别 sc表 ...

  5. mysql 离散度低 索引_mysql给离散度低的字段建立索引会出现什么问题,具体说下原因。...

    先说结论 重复性较强的字段,不适合添加索引.mysql给离散度低的字段,比如性别设置索引,再以性别作为条件进行查询反而会更慢. 原因 一个表可能会涉及两个数据结构(文件),一个是表本身,存放表中的数据 ...

  6. 索引使用经验:什么情况适合建索引

    索引使用经验:什么情况适合建索引 转载 适合建索引?不适合建索引? 数据库建立索引常用的规则如下:  1.表的主键.外键必须有索引:  2.数据量超过300的表应该有索引:  3.经常与其他表进行连接 ...

  7. mysql 排序字段是否需要建索引_MySQL索引详解(优缺点,何时需要/不需要创建索引,索引及sql语句的优化)...

    一.什么是索引? 索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息. 二.索引的作用? 索引相当于图书上的目录,可以根据目录上的页码快速找到所需的内容,提高 ...

  8. mysql 分组查出来横向展示_Mysql探索(一):B+Tree索引

    MySQL是目前业界最为流行的关系型数据库之一,而索引的优化也是数据库性能优化的关键之一.所以,充分地了解MySQL索引有助于提升开发人员对MySQL数据库的使用优化能力.  MySQL的索引有很多种 ...

  9. mysql索引底层图_MySQL索引底层数据结构

    一.何为索引? 1.索引是帮助数据库高效获取数据的排好序的数据结构. 2.索引存储在文件中. 3.索引建多了会影响增删改效率.(一张表最多允许建16个索引) (下面这张图为计算机组成原理内容,每查询一 ...

最新文章

  1. Confluence 6 配置日志
  2. 【Codeforces】913C Party Lemonade (贪...)。
  3. 伯克利大神一人投中16篇!ICLR 2021论文接收统计出炉
  4. R语言_高级数据管理
  5. java文件格式_Java Class文件格式详解
  6. vc 国际化的资源文件处理
  7. uDevice Center - IoT弹性在线多设备开发平台
  8. SqlServer时间戳与普通格式的转换
  9. Elasticsearch整理笔记(四)
  10. Spring表达式语言使用
  11. asp.net mvc 如何调用微信jssdk接口:分享到微信朋友(圈)| 分享到qq空间
  12. x210ii开发板使用fastboot下载出现没有权限的问题
  13. 弹窗插件zDialog使用教程
  14. 星空主题设计理念_丰田埃尔法蒙娜丽莎星空版 博眼球设计理念
  15. 电脑出现能够登录QQ但是浏览不了网页的情况
  16. 手把手教你在浏览器(chrom,edge)上安装Tampermonkey(油猴)(附所需所有内容链接)
  17. 联想大数据“双拳”出击另有深意
  18. 【2】Kali破解家用WI-FI密码 - WPA/WPA2加密
  19. LEFT OUTER JOIN 使用实例
  20. 苹果为啥要在iOS 9中使用新字体?

热门文章

  1. 适应农村乡下做的小生意
  2. python爬虫框架论文开题报告范文_仿今日头条新闻爬虫设计毕业论文+设计源码+开题报告...
  3. mysql 查询汉字的全拼音以及查询各个汉字的拼音首字母
  4. 元宇宙入门必读:分辨真正”元宇宙“的七大要素,缺一不可
  5. linux ctg重装,Linux 系统中 CTG 的安装, 应用程序开发以及调试
  6. java.lang.ClassCastException: com.xx.User cannot be cast to com.xx.User
  7. PHP+MySQL+Dreamweaver动态网站开发_安装篇
  8. 讽刺Google搜索API
  9. 电缆调制解调器(Cable Modem)
  10. 【时间序列分析基础系列之二】自回归分布滞后模型