深入浅出Mysql索引的那些事儿
|
为了进一步榨取mysql的效率,就可以考虑建立组合索引,即将LOGIN_NAME,CITY,AGE建到一个索引里:
建表时,LOGIN_NAME长度为100,这里用16,是因为一般情况下名字的长度不会超过16,这样会加快索引查询速度,还会减少索引文件的大小,提高INSERT,UPDATE的更新速度。 如果分别给LOGIN_NAME,CITY,AGE建立单列索引,让该表有3个单列索引,查询时和组合索引的效率是大不一样的,甚至远远低于我们的组合索引。虽然此时有三个索引,但mysql只能用到其中的那个它认为似乎是最有效率的单列索引,另外两个是用不到的,也就是说还是一个全表扫描的过程。 建立这样的组合索引,就相当于分别建立如下三种组合索引:
为什么没有CITY,AGE等这样的组合索引呢?这是因为mysql组合索引“最左前缀"的结果。简单的理解就是只从最左边的开始组合,并不是只要包含这三列的查询都会用到该组合索引。也就是说name_city_age(LOGIN_NAME(16),CITY,AGE)从左到右进行索引,如果没有左前索引,mysql不会执行索引查询。 如果索引列长度过长,这种列索引时将会产生很大的索引文件,不便于操作,可以使用前缀索引方式进行索引,前缀索引应该控制在一个合适的点,控制在0.31黄金值即可(大于这个值就可以创建)。
三.索引的使用及注意事项EXPLAIN可以帮助开发人员分析SQL问题,explain显示了mysql如何使用索引来处理select语句以及连接表,可以帮助选择更好的索引和写出更优化的查询语句。 使用方法,在select语句前加上Explain就可以了:
尽量避免这些不走索引的sql:
索引虽然好处很多,但过多的使用索引可能带来相反的问题,索引也是有缺点的:
索引只是提高效率的一个方式,如果mysql有大数据量的表,就要花时间研究建立优秀的索引,或优化查询语句。 使用索引时,有一些技巧
只要列中包含有NULL值,都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此符合索引就是无效的。 2.使用短索引 (编辑:怀化站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 海量、多维数据让人抓狂?高效搜索方法看这里
- MySQL – 计算两个日期时间之间的净时差,同时排除中断?
- 记一个 MySQL设计不合理地方:应用程序错误密码不断重连校验
- innodb_data_file_path和innodb_data_home_dir
- MS SQL 2005 Express已经存在时,在Windows Server 2003上安
- Percona MySQL 5.5 Linux通用二进制包安装 CentOS 6.9
- MsSQL Find Usages Table Or Stored Procedure
- MySQL 5.7创建多源复制
- web页面录屏实现
- MySQL数据库如何快速获得库中无主键的表

