mysql索引让我们的查询效率大大提高,但是,也不是所有情况都需要用到mysql索引,下面就让我们来分析一下mysql索引的使用。
创新互联是专业的宁武网站建设公司,宁武接单;提供网站建设、成都网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行宁武网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
mysql中的表有两种key,一种是primary key,还有secondary key。
如:
- CREATE TABLE layout_test (
- col1 int NOT NULL,
- col2 int NOT NULL,
- PRIMARY KEY(col1),
- KEY(col2)
- );
col1是primary key,col2是secondary key。它们建立mysql索引。
以下简称为pk和sk。
myisam:
在myisam中,pk和sk的数据存储方式是一样的。都是b-tree的叶节点上存储行号,即数据行的指针。
innodb:
在innodb中不太一样。
pk是以聚簇索引存在的,并且在b-tee的叶节点上存放着primary key的值和其它列的值及事务ID和回滚指针。(innodb的primary index是聚簇索引)
sk的叶节点上也与myisam不太一样,它存放着primary key的值(而不是数据的行指针)。
只有按最左边前缀查询的才会利用上索引。
下面这段来自mysql使用手册:
- mysql> CREATE TABLE test (
- id INT NOT NULL,
- last_name CHAR(30) NOT NULL,
- first_name CHAR(30) NOT NULL,
- PRIMARY KEY (id),
- INDEX name (last_name,first_name));
那么mysql索引name是一个在last_name和first_name上的索引,这个索引将被用于在last_name或last_name和first_name的一个已知范围内指定值的查询,因此,name索引将使用在下列查询中:
- mysql> SELECT * FROM test WHERE last_name="Widenius";
- mysql> SELECT * FROM test WHERE last_name="Widenius"
- AND first_name="Michael";
- mysql> SELECT * FROM test WHERE last_name="Widenius"
- AND (first_name="Michael" OR first_name="Monty");
- mysql> SELECT * FROM test WHERE last_name="Widenius"
- AND first_name >="M" AND first_name < "N";
- 然而,name索引将不用在下列询问中:
- mysql> SELECT * FROM test WHERE first_name="Michael";
- mysql> SELECT * FROM test WHERE last_name="Widenius"
- OR first_name="Michael";
【编辑推荐】
MySQL索引的用处
mysql索引的不足
实现ADO连接MYSQL的实现
mysql触发器new old介绍
建立MySQL触发器的语法
文章名称:mysql索引比较分析
文章地址:http://www.36103.cn/qtweb/news45/20295.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联