某系统反馈慢SQL影响生产,查看SLOW LOG发现下面慢SQL: SELECT COUNT(DISTINCT m.batch_no) FROM ob_relation r INNER JOIN ob_batch_d d ON r.sub_order_no = d.outbound_no INNER JOIN ob_batch_m m ON d.batch_no = m.batch_no WHERE r.production_mode =1 AND r.yn=0 AND r.outbound_n…
mysql的多列索引是经常会遇到的问题,怎样才能有效命中索引,是本文要探讨的重点. 多列索引使用的Btree,也就是平衡二叉树.简单来说就是排好序的快速索引方式.它的原则就是要遵循左前缀索引. 多个索引从左边往右都使用上,才能使用到整个多列索引. 下面我先建立一个简单的表做实验: create table t6 ( c1 char(1) not null default '', c2 char(1) not null default '', c3 char(1) not null default…
没有索引时mysql是如何查询到数据的 索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录.如果没有索引,查询将对整个表进行扫描,最坏的情况下,如果所有数据页都不在内存,需要读取10^4个页面,如果这10^4个页面在磁盘上随机分布,需要进行10^4次I/O,假设磁盘每次I/O时间为10ms(忽略数据传输时间),则总共需要100s(但实际上要好很多很多).如果对之建立B-Tree索…
转自:http://blog.chinaunix.net/uid-29305839-id-4257512.html 创建一个多列索引: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数据库提供两种类型的索引,如果没正确设置,索引的利用效率会大打折扣却完全不知问题出在这. 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) ); 以上创建的其实是一个多列索引,创建列索引的代码如下: CREATE TABLE …
mysql中 myisam,innodb默认使用的是 Btree索引,至于btree的数据结构是怎样的都不重要,只需要知道结果,既然是索引那这个数据结构最后是排好序:就像新华字典他的目录就是按照a,b,c..这样排好序的:所以你在找东西的时候才快,比如你找 “中” 这个字的解释,你肯定就会定位到目录的 z 开头部分: 组合索引可以这样理解,比如(a,b,c),abc都是排好序的,在任意一段a的下面b都是排好序的,任何一段b下面c都是排好序的: 组合索引的生效原则是  从前往后依次使用生效,如果中…
一. 本章介绍mysql中的索引的分类,存储,使用方法的介绍 1.  索引的存储分类 MyISAM存储引擎的表的数据和索引是自动分开存储的,各自是独立的一个文件, innodb 存储引擎的表的数据和索引是存储在同一个表空间里面,可以有多个文件组成. MyISAM和Innodb存储引擎都支持btree索引,memory/heap存储引擎支持hash和btree索引. 2. mysql如何使用索引 查询要使用索引最主要的条件是查询条件中需要使用索引关键字,如果是多列索引,那么只有索引条件使用了多列关…
本文出处:http://www.cnblogs.com/wy123/p/7211742.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他) MySQL中的InnoDB引擎表索引类型有一下几种(以下所说的索引,没有特殊说明,均指InnoDB引擎表索引.) 0 = Secondary Index,二级索引, 1 = Clustered Index,聚集索引 2 = Unique Index,唯一索引 3 = Pri…
数据库的索引可以加快查询速度,原因是索引使用特定的数据结构(B-Tree)对特定的列额外组织存放,加快存储引擎(索引是存储引擎实现)查找记录的速度.索引优化是数据库优化的最重要手段. 如果查询语句使用索引(通常是where条件匹配索引)就会利用树的结构加快查找,索引会按值查找到要查找的行在表中位置,不需回表查询数据的就是聚簇索引(索引和数据存放在一起).通常是需要回表再查数据,需要消耗额外的磁盘IO.所以有些时候(如按顺序读取数据)全表扫描会比使用索引快的原因就在于此. 查询条件只有一个字段时,…
“把Where条件里面的列都建上索引”,这种说法其实是非常错误的! 这样一个查询,假设actor_id与film_id都单独建立索引 SELECT film_id , actor_id FROM sakila.film_actor ; 在老的mysql版本中,mysql对这个查询会使用全表扫描,除非改写成下面这样 UNION ALL ; 但在mysql 5.0中,查询能够同时使用这两个单列索引进行扫描,并将结果进行合并,通过Explain的Extra列可以看到这点,这种算法有3个变种: 1.OR…