`

查找mysql中的低效索引

 
阅读更多
来自  http://wendal.net/461.html

从一个外国博客引用过来的

SELECT t.TABLE_SCHEMA AS `db`,
t.TABLE_NAME AS `table`,
s.INDEX_NAME AS `index name`,
s.COLUMN_NAME AS `FIELD name`,
s.SEQ_IN_INDEX `seq IN index`,
s2.max_columns AS `# cols`,
s.CARDINALITY AS `card`,
t.TABLE_ROWS AS `est rows`,
ROUND(((s.CARDINALITY / IFNULL(t.TABLE_ROWS, 0.01)) * 100), 2) AS `sel %`

FROM INFORMATION_SCHEMA.STATISTICS s
INNER JOIN INFORMATION_SCHEMA.TABLES t ON s.TABLE_SCHEMA = t.TABLE_SCHEMA AND s.TABLE_NAME = t.TABLE_NAME
INNER JOIN (
SELECT TABLE_SCHEMA, TABLE_NAME, INDEX_NAME, MAX(SEQ_IN_INDEX) AS max_columns
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA != 'mysql' GROUP BY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME ) AS s2 ON s.TABLE_SCHEMA = s2.TABLE_SCHEMA AND s.TABLE_NAME = s2.TABLE_NAME AND s.INDEX_NAME = s2.INDEX_NAME

WHERE t.TABLE_SCHEMA != 'mysql' /* Filter out the mysql system DB */
AND t.TABLE_ROWS > 10 /* Only tables with some rows */
AND s.CARDINALITY IS NOT NULL /* Need at least one non-NULL value in the field */
AND (s.CARDINALITY / IFNULL(t.TABLE_ROWS, 0.01)) < 1.00 /* unique indexes are perfect anyway */

ORDER BY `sel %`, s.TABLE_SCHEMA, s.TABLE_NAME /* DESC for best non-unique indexes */
LIMIT 10;
分享到:
评论

相关推荐

    MySQL创建索引,查看以及删除

    索引可以帮助快速查找和访问数据库中的数据,极大地提高了查询效率。本文将深入探讨MySQL中创建、查看和删除索引的相关知识。 一、创建索引 在MySQL中,索引主要分为以下几种类型: 1. 主键索引(Primary Key ...

    MySQL索引分析和优化.pdf

    2. **覆盖索引**:创建包含所有查询所需字段的索引,这样查询时可以直接从索引中获取数据,无需再访问数据表本身。 3. **索引维护**:定期检查索引的使用情况,对于不再使用的索引应及时删除,以节省空间并减少维护...

    mysql表和索引优化实践

    在B树索引中,分支因子`b`决定了每个节点能存储的索引字段个数。例如,当`b=2`时,每个16KB的节点可以存储两个索引值。计算树高`h`的公式是`h = ⎡logbn⎤`,它表示从叶子节点到根节点的节点个数。以一亿行记录为例...

    Mysql的索引详解学习笔记.zip

    4. 使用覆盖索引:查询时,如果索引包含所有需要的数据,MySQL可以直接从索引中获取结果,无需回表,提高效率。 5. 避免在索引列上使用函数:函数会阻止索引的直接使用。 五、索引维护 1. 定期分析索引:使用`...

    mysql.data版本集合

    如果关键字未在索引中,全表扫描将被触发,这是低效的。确保关键字段有合适的索引可以显著改善这种情况。 3. **全文搜索**:如果“给定关键字不在字典中”是因为查询涉及的是文本字段,考虑使用全文搜索引擎如MySQL...

    行业-81案例实战:陌生人社交APP的MySQL索引设计实战(一).rar

    索引是一种数据结构,它能够快速查找数据库中的记录。在MySQL中,B树是最常见的索引类型,用于InnoDB存储引擎。通过创建索引,我们可以将随机I/O转换为顺序I/O,显著加快查询速度。 在陌生人社交APP中,有几类重要...

    Mysql笔记-fxf

    又如,在复合索引中,如果查询条件没有包含最左侧的列,索引同样会失效。 - **关联查询过多**:过多的`JOIN`操作会导致查询复杂度增加,影响性能。 - **服务器调优**:通过调整MySQL服务器的相关配置,如缓存大小、...

    网易技术部MySQL中文资料

    - 介绍了如何根据不同的需求来查找MySQL的帮助文档,通常帮助文档会按照功能模块或操作类型进行分类。 - **1.2 快速查阅帮助** - 阐述了快速定位到所需帮助信息的方法,比如使用关键词搜索等。 **第2章 表类型...

    【技术】检查该重新编译的索引

    例如,某些数据库系统(如MySQL)提供了ALTER INDEX语句来在线重构建索引,而其他系统可能需要先删除再重建。 5. **工具辅助**:许多数据库管理工具提供了索引分析功能,比如Oracle的DBMS_REDEFINITION,SQL Server...

    浅谈MySQL索引优化分析

    在MySQL中,索引是一种特殊的数据结构,用于加速数据检索。当正确地设计和使用时,索引能够显著提高查询速度,尤其是在处理大量数据时。 首先,我们需要理解为什么SQL查询可能会变慢。这通常与查询语句的编写方式、...

    数据库索引,到底是什么

    同样地,在数据库中,当我们需要从海量数据中查找特定的信息时,如果没有有效的索引机制,那么查询将会变得极其低效。 以一个包含1000万条记录的数据库为例,如果需要找到其中某一条特定的记录(比如`name=...

    使用案例加深对MySQL SQL查询理解

    当WHERE子句没有索引支持时,MySQL可能需要遍历整个表,这在大数据量下非常低效。因此,明智地创建和使用索引至关重要。例如,对于经常出现在WHERE子句中的列,应考虑创建索引。 另一个优化策略是使用JOIN操作时要...

    MySQL Like模糊查询速度太慢如何解决

    - `LIKE keyword%`的情况则不同,索引通常是有效的,因为MySQL可以从索引中找到所有以`keyword`开头的记录。 - 对于`LIKE %keyword`,虽然索引失效,但可以通过创建基于翻转函数的索引来优化查询。例如,可以使用`...

    MySQL查询优化技术讲座.pdf

    索引是数据库中用于加快数据检索速度的一种数据结构。在未使用索引的情况下,数据库系统需要对整个表进行全表扫描,以查找满足条件的数据行。这种操作在大型数据集上效率极低。相比之下,索引通过预先排序和组织数据...

    MySQL技术资料来自网易的经验总结

    文档内容涵盖MySQL的开发和优化两大方面,具体包括了MySQL的基础使用技巧、存储引擎的选择、数据类型的选用、字符集配置、索引设计及使用、锁机制与事务处理、SQL的安全性问题、SQLMode的使用、SQL技巧等。...

Global site tag (gtag.js) - Google Analytics