在mysql数据库中,其实建索引也是一门学问,一个表中,索引并不是越多越好,而是适合你的业务才最重要。那么建立索引的时候,我们应该从以下几点去考量。

1. 索引字段越小越好,像varchar(10)肯定比text类型的效果要好。

2. 经常需要作为where、group by、order by等条件的时候,要为该字段建立索引。

3. 当要建立联合索引的时候,离散度较大的列放到前面。打个比方,如果要建立一个姓名(name)和年龄(age)的联合索引,肯定要把name放到前面(index(name,age)),因为age的范围最多不会超过0-120(全世界没几个人能活到120岁以上吧),而name的情况就有成千上万种了。放到前面的好处就是第一次就能筛掉一大批数据,这样更有利查询的效率。

4. 只给经常作为查询条件的字段建立索引,因为索引并不是越多越好,多了首先会增加磁盘开销,然后查询的时候,mysql引擎也要去判断该使用那个索引,再就是索引多了,对update、insert、delete的效率也会造成影响。

总之,建立索引的时候也要认真思考,才能让表结构更加完美

MySQL何时使用索引

对一个键码使用>, >=, =,

SELECT * FROM table_name WHERE key_part1=1 and key_part2 > 5;

SELECT * FROM table_name WHERE key_part1 IS NULL;

当使用不以通配符开始的LIKE

SELECT * FROM table_name WHERE key_part1 LIKE 'jani%'

在进行联结时从另一个表中提取行时

SELECT * from t1,t2 where t1.col=t2.key_part

找出指定索引的MAX()或MIN()值

SELECT MIN(key_part2),MAX(key_part2) FROM table_name where key_part1=10

一个键码的前缀使用ORDER BY或GROUP BY

SELECT * FROM foo ORDER BY key_part1,key_part2,key_part3

在所有用在查询中的列是键码的一部分时间

SELECT key_part3 FROM table_name WHERE key_part1=1

------------------------------------------------------------------------------------------------------------------------------------

MySQL何时不使用索引

如果MySQL能估计出它将可能比扫描整张表还要快时,则不使用索引。例如如果key_part1均匀分布在1和100之间,下列查询中使用索引就不是很好:

SELECT * FROM table_name where key_part1 > 1 and key_part1 < 90

如果使用HEAP表且不用=搜索所有键码部分。

在HEAP表上使用ORDER BY。

如果不是用键码第一部分

SELECT * FROM table_name WHERE key_part2=1

如果使用以一个通配符开始的LIKE

SELECT * FROM table_name WHERE key_part1 LIKE '%jani%'

搜索一个索引而在另一个索引上做ORDER BY

SELECT * from table_name WHERE key_part1 = # ORDER BY key2

mysql 建立索引的例子_mysql建立合适的索引的例子相关推荐

  1. mysql字符串索引如何排序_MySQL 建立索引的时候如何排序?

    以下回复可能有需要更正的地方 "表引擎在 innodb 的情况下建立 age.sex 的联合索引即可,innodb 会在建立索引时生成 btree 数据结构,这个数据结构上会隐式的加上主键& ...

  2. mysql建立外键快捷方式_mysql建立外键

    InnoDB与Myisam的六大区别: 1.  构成上的区别 MyISAM: 每个MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型..frm文件存储表定义.数据文 ...

  3. mysql数据库存储引擎和索引的描述_Mysql InnoDB引擎的索引与存储结构详解

    前言 在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的. 而MySql数据库提供了多种存储引擎.用户可以根据不同的需求为数据表选择不同的存储引擎,用户也 ...

  4. mysql索引下推原理_MySQL:好好的索引,为什么要下推?

    前段时间有读者提议讲讲索引下推,这期就把这事儿安排上.多余的前言就不赘述了,我们直接开始. 列位坐好! - 思维导图 - 回表操作 对于数据库来说,只要涉及到索引,必然绕不过去回表操作.当然这也是我们 ...

  5. mysql行锁同索引键问题_mysql 锁问题 (相同索引键值或同一行或间隙锁的冲突)

    1.使用相同索引键值的冲突 由于mysql 的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但如果是使用相同的索引键,是会出现锁冲突的.设计时要注意 例如:city表city_ ...

  6. mysql 聚合索引和聚簇索引_MySQL 聚簇索引 和覆盖索引

    一.聚簇索引 1.聚簇索引并不是一种单独所以,而是一种数据储存方式. InnoDB 的聚簇索引实际上在同一结构中保存了B-Tree 索引和数据行. 2.当表有聚簇索引时,它的数据行实际上存放在索引的叶 ...

  7. mysql的表是聚集索引组织表_Mysql的Innodb引擎索引总结

    索引的目的是什么? 答:数据库添加索引的目的是为了加快查询速度. 索引的的数据结构是什么? 答:(这里的B是balance)B+树来存储索引,B+树类似于二叉树. B+树是怎么查找数据的? 答:B+树 ...

  8. mysql删除索引很慢_mysql建立索引删除索引很慢的解决_MySQL

    bitsCN.com mysql建立索引删除索引很慢的解决 目前情况 建立索引非常慢,需8分钟... 目前环境: ---------------- table行: 30W 版本5.0.45-commu ...

  9. 查看mysql 中建立的表空间_mysql 表空间及索引的查看

    1.查看索引 (1)单位是GB SELECT CONCAT(ROUND(SUM(index_length)/(1024*1024*1024), 2), ' GB') AS 'Total Index S ...

最新文章

  1. IBM用量子计算机成功模拟分子,登上《自然》封面
  2. 手机文件share.php,华为P10手机Huawei Share怎么用?一秒共享手机文件
  3. C 指针常量 和常量指针 指向常量的指针常量的使用
  4. [硬件]SICK LMS111激光扫描仪使用
  5. 记一次ArrayList产生的线上OOM问题
  6. 带你掌握Vue过滤器filters及时间戳转换
  7. AIoT、DevOPS、数据平台、开源,你不可不知的微软 Azure 黑科技大公开
  8. idea lib下有jar包但是仍然报错 找不到类
  9. 电芯知识汇总(转载)
  10. iis7.5 php isapi映射,IIS7、iis7.5让ISAPI扩展DLL执行的方法
  11. 虚拟机服务器异常怎么解决,windows server 2016 虚拟机异常关闭
  12. @Zabbix配置邮箱告警及钉钉告警
  13. cad卸载工具_CAD安装失败都是红?
  14. C语言定时器触发回调函数
  15. win10系统桌面图标变为白色方框和去除桌面图标快捷方式小箭头的方法
  16. python数据可视化案例 淘宝粽子_Python分析淘宝月饼销售数据,哪种最受欢迎?排第一的你想不到...
  17. 【codeforces 794B】Cutting Carrot
  18. WebUI——领导驾驶舱
  19. 直流电机驱动保护方案
  20. C#设置开机启动项、取消开机启动项

热门文章

  1. 玩 High API 系列好文:UGC内容检测、视频智能、拍照翻译、懂天气的草地喷水头...
  2. 重磅来袭 | 移动云城市峰会分论坛暨移动云TeaTalk青岛站 即将开启
  3. 深度揭秘:腾讯存储技术发展史
  4. 老码农:这段代码绝了,切勿模仿!
  5. 华为云WeLink正式发布,这是更懂企业的智能工作平台一枚!
  6. 火热的云计算,你知道这些吗?
  7. 乘势而起,走进2019年风口“边缘计算”
  8. web前端 到底怎么学?掌握什么可以拿到高薪?
  9. 前端性能——数据持久化
  10. mysql远程备份工具_innobackupex实现MySQL远程备份