MySQL-index
2015-07-18 22:52
567 查看
MySQL创建索引应该注意的问题
1.
对于存在有多个条件的情况,比如:
“where a=xx and b=yy”;
“where a=xx order by b”;
“where a=xx group by b”;
需要使用组合索引。但是组合索引只能在SQL语句中满足”最左前缀”的条件下使用。且组合索引有一些副作用,如索引尺寸可能比数据本身大,因为组合索引的组合条目多。所以在实际应用中,要量身定做,使用慢查询分析工具分析。
2.
建立索引是有资源开销的,索引占用的空间大小也是需要考虑的。而且当执行update、delete语句时,会使得索引更新,也会耗掉更多的时间。可以使用mysqlreport报告,了解select、update、delete、insert、replace各语句所占的百分比。
3
查询语句中使用like关键字进行查询时,如果匹配字符串的第一个字符是 % 时,索引不会被使用。如果 % 不是在第一个位置,索引就会被使用。
4
查询语句只有OR关键字时,如果OR前后的两个条件的列都是索引时,查询中将使用索引。如果OR前后有一个条件的列不使用索引,那么查询中将不使用索引。
5
子查询可以使查询更灵活,但是子查询执行效率不高。子查询时,MySQL需要为内层查询语句的查询结果建立一个临时表,然后外层查询语句在临时表中查找记录。查询结束后,MySQL还需要撤销这些临时表。所以在MySQL中建议使用连接查询代替子查询,连接查询不需要建立临时表,其速度比子查询要快
1.
对于存在有多个条件的情况,比如:
“where a=xx and b=yy”;
“where a=xx order by b”;
“where a=xx group by b”;
需要使用组合索引。但是组合索引只能在SQL语句中满足”最左前缀”的条件下使用。且组合索引有一些副作用,如索引尺寸可能比数据本身大,因为组合索引的组合条目多。所以在实际应用中,要量身定做,使用慢查询分析工具分析。
2.
建立索引是有资源开销的,索引占用的空间大小也是需要考虑的。而且当执行update、delete语句时,会使得索引更新,也会耗掉更多的时间。可以使用mysqlreport报告,了解select、update、delete、insert、replace各语句所占的百分比。
3
查询语句中使用like关键字进行查询时,如果匹配字符串的第一个字符是 % 时,索引不会被使用。如果 % 不是在第一个位置,索引就会被使用。
4
查询语句只有OR关键字时,如果OR前后的两个条件的列都是索引时,查询中将使用索引。如果OR前后有一个条件的列不使用索引,那么查询中将不使用索引。
5
子查询可以使查询更灵活,但是子查询执行效率不高。子查询时,MySQL需要为内层查询语句的查询结果建立一个临时表,然后外层查询语句在临时表中查找记录。查询结束后,MySQL还需要撤销这些临时表。所以在MySQL中建议使用连接查询代替子查询,连接查询不需要建立临时表,其速度比子查询要快
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜
- MySQL 备份与恢复
- MySQL 优化
- MySQL 数据类型