表示 进入内容 131113201409
« 先前的 10 新的记录 | 下一步 10 较早的记录 »
Displaying posts with tag: 索引 (reset)
MySQL索引与Index Condition Pushdown

大约在两年前,我写了一篇关于MySQL索引的文章。最近有同学在文章的评论中对文章的内容提出质疑,质疑主要集中在联合索引的使用方式上。在那篇文章中,我说明联合索引是将各个索引字段做字符串连接后作为key,使用时将整体做前缀匹配。

而这名同学在这个页面找到了如下一句话:index condition pushdown is usually useful with multi-column indexes: the first component(s) is what index access is done for, the subsequent have columns that we read and check conditions on。从而认为联合索引的使用方式与文中不符。

实际上,这个页面所讲述的是在MariaDB 5.3.3(MySQL是在5.6)开始引入的一种叫做Index Condition …

[获取更多]
MySQL源码:索引相关的数据结构(后篇)

   前篇介绍了MySQL存储索引信息的基本数据结构。本篇将延续下去,介绍MySQL如何找到可以使用的索引,以及期间需要使用的主要数据结构。

   谁适合阅读: 本文不打算从High Level来介绍MySQL索引及其使用,相反是从MySQL源码对应的数据结构开始介绍。如果你了解MySQL索引的基本原理,还打算继续从源码的角度解决一些索引使用的问题,那么你适合参考本文,否则,打住,真的很枯燥:(。在可见的未来,作者还将介绍Range优化相关的数据结构等。

0. 概述

   本文介绍MySQL如何发现WHERE条件中的等值表达式,并通过分析这些等值表达式,找到可以使用的索引。在这个过程中,MySQL将递归的访问所有WHERE条件"谓词",并将等值表达式都存储到KEY_FIELD对象的数组中。

  …

[获取更多]
MySQL源码:索引相关的数据结构(前篇)

   本文将尝试介绍MySQL索引存储相关的数据结构。程序=数据结构+算法,了解数据结构,然后就可以进一步了解MySQL源码中如何使用索引,如何选择自己的执行计划。

1. MySQL如何描述某个数据表的索引

   MySQL使用TABLE对象来描述一个数据表,那么数据表的索引是如何描述,索引的统计信息又是如何存储的呢? 例如我们有如下数据表:

CREATE TABLE `users` (
  `id` int(11) NOT NULL,
  `nick` varchar(32) DEFAULT NULL,
  `reg_date` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `IND_NICK` (`nick`),
  KEY `IND_REGDATE` (`reg_date`)
) 

   该表有索引,PRIMARY KEY、IND_NICK、IND_REGDATE,我们来看看MySQL内部是如何存储这三个索引,以及如何使用这些索引的统计信息的。下图,描述了存储一个数据表索引的主要结构:

    …

[获取更多]
mysql的cardinality异常,导致索引不可用

   前段时间,一大早上,就收到报警,警告php-fpm进程的数量超过阈值。最终发现是一条sql没用到索引,导致执行数据库查询慢了,最终导致php-fpm进程数增加。最终通过analyze table feed_comment_info_id_0000 命令更新了Cardinality ,才能再次用到索引。

   排查过程如下:

   sql语句:

select id from feed_comment_info_id_0000 where obj_id=101 and type=1;

   索引信息:

show index from feed_comment_info_id_0000
+---------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | …
[获取更多]
Mysql高级之索引

原文: Mysql高级之索引

索引:是针对数据所建立的目录. 作用: 可以加快查询速度 负面影响: 降低了增删改的速度.

索引的创建原则: 1:不要过度索引 2:在where条件最频繁的列上加.

【mysql】  【ADD】  【索引】  【空格】  【index】  【last】  【varchar】   …

[获取更多]
MySQL COLUMNS分区

介绍 COLUMN分区是5.5开始引入的分区功能,只有RANGE COLUMN和LIST COLUMN这两种分区;支持整形、日期、字符串;RANGE和LIST的分区方式非常的相似。     COLUMNS和RANGE和LIST分区的区别 1.针对日期字段的分区就不需要再使用函数进行转换了,例如针对date字段进行分区不需要再使用YEAR()表达式进行转换。

【mysql】  【索引】  【Create】  【html】  【list】   …

[获取更多]
[MySQL Reference Manual] 8 优化

8.优化 8.优化... 1 8.1 优化概述... 1 8.2 优化SQL语句... 1 8.2.1 优化SELECT语句... 1 8.2.1.1 SELECT语句的速度... 1 8.

【算法】  【mysql】  【innodb】  【性能】  【线程】  【Cache】  【索引】  【index】   …

[获取更多]
Mariadb 10.0.12 服务器my.cf配置

环境UBUNUT 14.04  数据库:Mariadb 10.0.12 内存:12G 呆狐狸.凨 my.cnf配置

[client] port=3306 socket=/www/lanmps/mysql/data/mysql.sock

[mysql] default-character-set=utf8

[mysqld] port=3306 socket=/www/lan

【服务器】  【mysql】  【innodb】  【性能】  【日志】  【配置】  【索引】   …

[获取更多]
[MySQL FAQ]系列 — MySQL联合索引是否支持不同排序规则

篇首语:
截止到目前的5.7.4版本为止,MySQL的联合索引仍无法支持联合索引使用不同排序规则,例如:ALTER TABLE t ADD INDEX idx(col1, col2 DESC)。

先来了解下MySQL关于索引的一些基础知识要点:

• a、EXPLAIN结果中的key_len只显示了条件检索子句需要的索引长度,但 ORDER BY、GROUP BY 子句用到的索引则不计入 key_len 统计值;
• b、联合索引(composite index):多个字段组成的索引,称为联合索引;
例如:ALTER TABLE t ADD INDEX `idx` (col1, col2, col3)
• c、覆盖索引(covering index):如果查询需要读取到索引中的一个或多个字段,则可以从索引树中直接取得结果集,称为覆盖索引;
例如:SELECT col1, col2 FROM t;
• d、最左原则(prefix …
[获取更多]
MySQL replace into (insert into 的增强版)

在使用SQL语句进行数据表插入insert操作时,如果表中定义了主键,插入具有相同主键的记录会报错:    Error Code: 1062. Duplicate entry 'XXXXX' for key 'PRIMARY'(主键冲突)   这样我们只好检查主键是不是存在,若存在则更新,若不存在则插入。

【mysql】  【SQL】  【code】  【索引】   点击查看原文>

表示 进入内容 131113201409
« 先前的 10 新的记录 | 下一步 10 较早的记录 »