mysql创建索引的最佳实践是什么

mysql创建索引的最佳实践是什么

参与5

2同行回答

WentasyWentasy数据库管理员ChainONE
这一块的资料已经很多了,不赘述。补充一点,把 MySQL 索引原理吃透。显示全部

这一块的资料已经很多了,不赘述。补充一点,把 MySQL 索引原理吃透。

收起
互联网服务 · 2017-05-19
浏览1652
bryanbryan软件架构设计师金融研发
索引的终极目标就是:使用最少的字节建立关于数据行存储的一个记录,从而尽量减少IO1) 避免多列索引2)最左前缀(前缀索引):数据库在查询数据时会进行最左索引匹配,例如对于(a,b,c)三列联合索引的表在where条件时的数据列按照索引每列的顺序进行指定,比如对上面索引使用where a=’A...显示全部

索引的终极目标就是:使用最少的字节建立关于数据行存储的一个记录,从而尽量减少IO
1) 避免多列索引
2)最左前缀(前缀索引):数据库在查询数据时会进行最左索引匹配,例如对于(a,b,c)三列联合索引的表在where条件时的数据列按照索引每列的顺序进行指定,比如对上面索引使用where a=’A’ and b=’B’ and c=’C’进行检索;
3)索引不包含含有NULL列:含有NULL的数值不会包含在索引中,同时复合索引中只要有一列是NULL,则此行数据对索引则无效。因此在数据库设计时尽量避免默认值为NULL;
4)尽量使用短索引:在建立索引时,尽量保持索引列长度短。比如,一个定义为CHAR(255)的数据列,如果前10位的字符的辨识度会很高,则可以对此建立索引。较短的索引可以节省磁盘IO操作和磁盘空间,从而提高查询速度;
5)索引列排序:查询语句只使用一个索引,因此,如果where子句已使用索引,则order by中的列则不会使用索引。数据库默认排序符合要求的情况下尽量不要使用排序操作,也不要包含多个列的排序。在的确需要时,最好给这些列创建复合索引。
6)like语句操作:一般情况下避免使用like操作,如果必须使用,尽量使用like “aaa%”而避免使用like “%aaa%”。
避免列运算:子句where YEAR(adddate)<2016,将因对每行进行运算而导致索引失效,最好adddate<'2007-01-01'。mysql只对一下操作符才使用索引:<、<=、=、>、>=、between、in、及不以通配符%或_开头的like。

收起
银行 · 2017-05-19
浏览1674

提问者

陈宇
陈宇0622
系统工程师某银行
擅长领域: 存储灾备服务器

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2017-05-17
  • 关注会员:3 人
  • 问题浏览:4395
  • 最近回答:2017-05-19
  • X社区推广