1,在什么列适合添加索引
(1)较频繁的作为查询条件字段应该添加索引
select * from emp where empid = 2;
(2)唯一性太差的字段不适合添加索引,即时频繁作为查询条件。
select * from emp where sex = '男';
(3)更新非常频繁的字段不适合创建索引。
select * from emp where logincount = 2;
(4)不会出现在where条件中的字段,不应该创建索引。
2,索引的种类
(1)主键索引,把某列设为主键,此列就成为主键索引。
(2)唯一索引(unique),该列具有唯一性,还是索引。
(3)普通索引(index),
(4)全文索引(FULLTEXT),是有MyISAM存储引擎支持全文索引。
(5)复合索引,多列组成一个索引。
3,索引的操作
(1)添加索引
create [unique|FULLTEXT] index 索引名 on 表名(列名)
alter table 表名 add index 索引名(列名)
以上两种方式没法创建主键索引,创建主键索引语句:alter table 表名 add primary key(列)
(2)删除索引
drop index 索引名 on 表名
alter table 表名 drop index index_name
以上没法删除主键索引,删除主键索引语句如下:alter table 表名 drop primary key
(3)显示索引
show indexes from 表名
show keys from 表名
4,索引的使用
(1)下列几种情况有可能使用索引
(a)对于创建的多列索引,只要查询条件使用了最左边的列,索引一般就会被使用。
news数据表 id title content author ,
设定title和author为索引title_author,那么查询条件中有title字段时候,使用到title_author索引;如果查询条件没有title,只有author,则使用不到title_author索引。
alter table news add index title_author (title,author)。
select * from news where title = '体操奥运会夺冠'; //用到索引
select * from news where author = '李哲'; //使用不到索引
(b)对于使用like的查询,查询如果是'%aaa'不会使用到索引,'aaa%'会使用到索引。
news数据表 id title content author ,
设定title为索引title_index,在查询条件中title字段开头是%,则不能启用title_index索引;字段开头必须不为%,才会启用索引。
alter table news add index title_index(index);
select * from news where title like '%奥运会夺金'; //没法使用索引
select * from news where title like '奥运会%夺金'; //使用索引
select * from news where title like '%奥运会夺金%'; //使用索引
(2)下列几种情况使用不到索引
(a)如果条件中由or,即使其中有条件带索引也不会使用。
(b)对于多列索引,不是使用的第一部分,则不会使用索引。
(c)like查询是以%开头。
(d)如果列类型是字符串,那一定要在条件中将数据使用引号引用起来。否则不使用索引。
(e)如果mysql估计使用全表扫描要比使用索引快,则不使用索引。比如数据表中记录特别少,那可以直接扫描,不用索引。
5,查看索引的使用情况
show status like 'Handle_read%'
其中,Handle_read_key,这个值越高越好,越高表示使用索引查询到的次数越多;
Handle_read_rnd_next,这个值越高,说明查询低效;
四,mysql优化——sql语句优化之索引二的更多相关文章
-
mysql的sql语句优化方法面试题总结
mysql的sql语句优化方法面试题总结 不要写一些没有意义的查询,如需要生成一个空表结构: select col1,col2 into #t from t where 1=0 这类代码不会返回任何结 ...
-
php面试专题---MySQL常用SQL语句优化
php面试专题---MySQL常用SQL语句优化 一.总结 一句话总结: 原理,万变不离其宗:其实SQL语句优化的过程中,无非就是对mysql的执行计划理解,以及B+树索引的理解,其实只要我们理解执行 ...
-
MySQL常用SQL语句优化
推荐阅读这篇博文,索引说的非常详细到位:http://blog.linezing.com/?p=798#nav-3-2 在数据库日常维护中,最常做的事情就是SQL语句优化,因为这个才是影响性能的最主要 ...
-
三,mysql优化--sql语句优化之索引一
1,需求:如何在一个项目中,找到慢查询的select,mysql数据库支持把慢查询语句,记录到日志中.供程序员分析.(默认不启用此功能,需要手动启用) 修改my.cnf文件(有些地方是my.ini) ...
-
MySQL 数据库--SQL语句优化
explain查询和分析sql 开发中,为满足一业务功能,使用mysql书写sql时,一条sql往往有多种写法,那么我们就需要选择执行效率比较高的sql. 因此要比较分析sql的执行过程,且同一条sq ...
-
Mysql的Sql语句优化
在Mysql中执行Sql语句经常会遇到有的语句执行时间特别长的情况,出现了这种情况我们就需要静下心分析分析. 首先,我们需要确定系统中哪些语句执行时间比较长.这个可以使用Mysql的慢日志来跟踪.下面 ...
-
五,mysql优化——sql语句优化小技巧
1,大批量插入数据 (1)对于MyISAM: alter table table_name disable keys; loading data; alter table table_name ena ...
-
千万级大数据的Mysql数据库SQL语句优化
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
-
MySQL的SQL语句优化-group by语句的优化
原文:http://bbs.landingbj.com/t-0-243202-1.html 默认情况下,MySQL排序所有GROUP BY col1, col2, ....,查询的方法如同在查询中指定 ...
随机推荐
-
angularjs——插值字符串
一.何为插值字符串? 其实插值字符串的意思就是:拥有字符插值标记的字符串.如: hello,{{ to }}....字符插值标记:相当于我们平时在字符串替换中使用到的占位符.上面的例子中的{{to}} ...
-
Jmeter 录制脚本
Jmeter中有2种方法可以录制脚本. 不过我个人非常不推荐录制脚本,录制的脚本混乱,需要再次加工才能使用. 像我这么精通HTTP协议的人. 一直都是使用Fiddler来抓包,然后自己写脚本. 无论 ...
-
SVD小结
1.矩阵分解 假设一个矩阵Data是m行n列,SVD(奇异值分解)将Data分解为U,E,VT 三个矩阵: Datam*n=Um*kEk*kVTk*n E是一个对角矩阵,对角元素为奇异值,对应Data ...
-
poj 1416 (hdu 1539)Shredding Company:剪枝搜索
点击打开链接 题目大意是有一个分割机,可以把一串数字分割成若干个数字之后求和,题目输入一个数字上界和待分割的数字,让我们求出分割后数字之和在不超过给定max的情况下的最大值,并且给出分割方案,如果没有 ...
-
C#获取当前日期时间(转)
我们可以通过使用DataTime这个类来获取当前的时间.通过调用类中的各种方法我们可以获取不同的时间:如:日期(2008-09-04).时间(12:12:12).日期+时间(2008-09-04 12 ...
-
for循环小题
已知数列1,1,2,3,5,8,…….,N.输出前N项的和: 出1到100之间所有偶数之和 国际象棋问题 已知数列1,1,2,3,5,8,…….,N.输出前N项的和: int a = 1, b = 1 ...
-
C# 模拟POST提交文件
http://blog.csdn.net/hellowjwang/article/details/19975635 public class HttpPost { /// <summary> ...
-
ReactiveCocoa源码解析(五) SignalProtocol的observe()、Map、Filter延展实现
上篇博客我们对Signal的基本实现以及Signal的面向协议扩展进行了介绍, 详细内容请移步于<Signal中的静态属性静态方法以及面向协议扩展>.并且聊了Signal的所有的g功能扩展 ...
-
linux连接mysql 出现Access denied for user &#39;root&#39;@&#39;localhost&#39;(using password: YES)错误解决方案
linux连接mysql /usr/local/mysql/bin/mysql -uroot -p 输入密码出现Access denied for user 'root'@'localhost'(us ...
-
利用PowerDesigner15在win7系统下对MySQL 进行反向工程(一)
利用PowerDesigner15在win7系统下对MySQL 进行反向工程 1.首先,安装以下的驱动 2.找到"C:\Windows\System32" 3.双击"od ...