Mysql如何选择合适的索引

【MYSQL】高性能的索引策略 - 选择合适的索引列顺序 阅读详情

对于我们之前创建的表:employees

假设我们执行如下SQL:
 EXPLAIN select * from employees where name > 'a';

可见上方并未走索引,而当我们执行下方SQL的时候,他走了索引:

 EXPLAIN select * from employees where name > 'zzz';

那么Mysql到底是如何选择索引的呢?我们可以选择trace工具来查看Mysql选择索引的过程。

注意:trace工具开启会影响Mysql性能,使用完毕后需要立即关闭。

trace工具用法:

首先开启trace工具:

set session optimizer_trace="enabled=on",end_markers_in_json=on; 

其次执行查询SQL,下方两条需一起执行:

select * from employees where name > 'a' order by position; 
SELECT * FROM information_schema.OPTIMIZER_TRACE;

将trace列结果拷贝出来,放到文本工具中查看如下:

查看trace字段: 
{
    "steps": [{
            "join_preparation": {‐‐第一阶段: SQL准备阶段, 格式化sql 
            "select#": 1,
                "steps": [{
                        "expanded_query": "/* select#1 */ select `employees`.`id` AS `id`,`employees`.`name` AS `name`,`empl oyees`.`age` AS `age`,`employees`.`position` AS `position`,`employees`.`hire_time` AS `hire_time` from `employees` where (`employees`.`name` > 'a') order by `employees`.`position`"

                    }

                ] /* steps */
            } /* join_preparation */

        },
        {
            "join_optimization": {‐‐第二阶段: SQL优化阶段 
            "select#": 1,
                "steps": [{
                        "condition_processing": {‐‐条件处理 
                        "condition": "WHERE",
                            "original_condition": "(`employees`.`name` > 'a')",
                            "steps": [{
                                    "transformation": "equality_propagation",
                                    "resulting_condition": "(`employees`.`name` > 'a')"

                                },
                                {
                                    "transformation": "constant_propagation",
                                    "resulting_condition": "(`employees`.`name` > 'a')"

                                },
                                {
                                    "transformation": "trivial_condition_removal",
                                    "resulting_condition": "(`employees`.`name` > 'a')"

                                }

                            ] /* steps */

                        } /* condition_processing */

                    },
                    {
                        "substitute_generated_columns": {

                        } /* substitute_generated_columns */

                    },
                    {
                        "table_dependencies": [‐‐表依赖详情 {
                                "table": "`employees`",
                                "row_may_be_null": false,
                                "map_bit": 0,
                                "depends_on_map_bits": [] /* depends_on_map_bits */
                            }

                        ] /* table_dependencies */
                    },
                    {
                        "ref_optimizer_key_uses": [] /* ref_optimizer_key_uses */
                    },
                    {
                        "rows_estimation": [‐‐预估表的访问成本 
                        {
                            "table": "`employees`",
                            "range_analysis": {
                                "table_scan": {‐‐全表扫描情况 
                                    "rows": 10123,‐‐扫描行数 
                                    "cost": 2054.7‐‐ 查询成本
                                } /* table_scan */ ,
                                "potential_range_indexes": [‐‐查询可能使用的索引 
                                    {
                                        "index": "PRIMARY",‐‐主键索引 
                                        "usable": false,
                                        "cause": "not_applicable"

                                    },
                                    {
                                        "index": "idx_name_age_position",‐‐辅助索引 
                                        "usable": true,
                                        "key_parts": [
                                            "name",
                                            "age",
                                            "position",
                                            "id"
                                        ] /* key_parts */
                                    }

                                ] /* potential_range_indexes */ ,
                                "setup_range_conditions": [] /* setup_range_conditions */ ,
                                "group_index_range": {
                                    "chosen": false,
                                    "cause": "not_group_by_or_distinct"

                                } /* group_index_range */ ,
                                "analyzing_range_alternatives": {‐‐分析各个索引使用成本 
                                "range_scan_alternatives": [{
                                        "index": "idx_name_age_position",
                                        "ranges": [
                                            "a < name"‐‐索引使用范围
                                        ] /* ranges */ ,
                                        "index_dives_for_eq_ranges": true,
                                        "rowid_ordered": false,‐‐使用该索引获取的记录是否按照主键排序 
                                        "using_mrr": false,
                                        "index_only": false, ‐‐是否使用覆盖索引 
                                        "rows": 5061, ‐‐索引扫描行数 
                                        "cost": 6074.2, ‐‐索引使用成本 
                                        "chosen": false, ‐‐是否选择该索引 
                                        "cause": "cost"
                                    }] /* range_scan_alternatives */ ,
                                    "analyzing_roworder_intersect": {
                                        "usable": false,
                                        "cause": "too_few_roworder_scans"
                                    } /* analyzing_roworder_intersect */
                                } /* analyzing_range_alternatives */
                            } /* range_analysis */
                        }] /* rows_estimation */
                    },
                    {
                        "considered_execution_plans": [{
                            "plan_prefix": [] /* plan_prefix */ ,
                            "table": "`employees`",
                            "best_access_path": {‐‐最优访问路径 
                            "considered_access_paths": [‐‐最终选择的访问路径 
                            {
                                    "rows_to_scan": 10123,
                                    "access_type": "scan",‐‐访问类型: 为scan, 全表扫描 
                                    "resulting_rows": 10123,
                                    "cost": 2052.6,
                                    "chosen": true,‐‐确定选择 
                                    "use_tmp_table": true
                                }] /* considered_access_paths */
                            } /* best_access_path */ ,
                            "condition_filtering_pct": 100,
                            "rows_for_plan": 10123,
                            "cost_for_plan": 2052.6,
                            "sort_cost": 10123,
                            "new_cost_for_plan": 12176,
                            "chosen": true
                        }] /* considered_execution_plans */
                    },
                    {
                        "attaching_conditions_to_tables": {
                            "original_condition": "(`employees`.`name` > 'a')",
                            "attached_conditions_computation": [] /* attached_conditions_computation */ ,
                            "attached_conditions_summary": [{
                                "table": "`employees`",
                                "attached": "(`employees`.`name` > 'a')"
                            }] /* attached_conditions_summary */
                        } /* attaching_conditions_to_tables */
                    },
                    {
                        "clause_processing": {
                            "clause": "ORDER BY",
                            "original_clause": "`employees`.`position`",
                            "items": [{
                                    "item": "`employees`.`position`"

                                }

                            ] /* items */ ,
                            "resulting_clause_is_simple": true,
                            "resulting_clause": "`employees`.`position`"

                        } /* clause_processing */

                    },
                    {
                        "reconsidering_access_paths_for_index_ordering": {
                            "clause": "ORDER BY",
                            "steps": [] /* steps */ ,
                            "index_order_summary": {
                                "table": "`employees`",
                                "index_provides_order": false,
                                "order_direction": "undefined",
                                "index": "unknown",
                                "plan_changed": false
                            } /* index_order_summary */

                        } /* reconsidering_access_paths_for_index_ordering */

                    },
                    {
                        "refine_plan": [{
                                "table": "`employees`"

                            }

                        ] /* refine_plan */
                    }

                ] /* steps */
            } /* join_optimization */

        },
        {
            "join_execution": {‐‐第三阶段: SQL执行阶段 
            "select#": 1,
                "steps": [] /* steps */
            } /* join_execution */

        }

    ] /* steps */
}

 结论: 全表扫描的成本低于索引扫描, 所以mysql最终选择全表扫描

而针对第二条SQL:

select * from employees where name > 'zzz' order by position; 
SELECT * FROM information_schema.OPTIMIZER_TRACE;

{
  "steps": [
    {
      "join_preparation": {
        "select#": 1,
        "steps": [
          {
            "expanded_query": "/* select#1 */ select `employees`.`id` AS `id`,`employees`.`name` AS `name`,`employees`.`age` AS `age`,`employees`.`position` AS `position`,`employees`.`hire_time` AS `hire_time` from `employees` where (`employees`.`name` > 'zzz') order by `employees`.`position`"
          }
        ] /* steps */
      } /* join_preparation */
    },
    {
      "join_optimization": {
        "select#": 1,
        "steps": [
          {
            "condition_processing": {
              "condition": "WHERE",
              "original_condition": "(`employees`.`name` > 'zzz')",
              "steps": [
                {
                  "transformation": "equality_propagation",
                  "resulting_condition": "(`employees`.`name` > 'zzz')"
                },
                {
                  "transformation": "constant_propagation",
                  "resulting_condition": "(`employees`.`name` > 'zzz')"
                },
                {
                  "transformation": "trivial_condition_removal",
                  "resulting_condition": "(`employees`.`name` > 'zzz')"
                }
              ] /* steps */
            } /* condition_processing */
          },
          {
            "substitute_generated_columns": {
            } /* substitute_generated_columns */
          },
          {
            "table_dependencies": [
              {
                "table": "`employees`",
                "row_may_be_null": false,
                "map_bit": 0,
                "depends_on_map_bits": [
                ] /* depends_on_map_bits */
              }
            ] /* table_dependencies */
          },
          {
            "ref_optimizer_key_uses": [
            ] /* ref_optimizer_key_uses */
          },
          {
            "rows_estimation": [
              {
                "table": "`employees`",
                "range_analysis": {
                  "table_scan": {
                    "rows": 100117,
                    "cost": 20378
                  } /* table_scan */,
                  "potential_range_indexes": [
                    {
                      "index": "PRIMARY",
                      "usable": false,
                      "cause": "not_applicable"
                    },
                    {
                      "index": "idx_name_age_position",
                      "usable": true,
                      "key_parts": [
                        "name",
                        "age",
                        "position",
                        "id"
                      ] /* key_parts */
                    }
                  ] /* potential_range_indexes */,
                  "setup_range_conditions": [
                  ] /* setup_range_conditions */,
                  "group_index_range": {
                    "chosen": false,
                    "cause": "not_group_by_or_distinct"
                  } /* group_index_range */,
                  "analyzing_range_alternatives": {
                    "range_scan_alternatives": [
                      {
                        "index": "idx_name_age_position",
                        "ranges": [
                          "zzz < name"
                        ] /* ranges */,
                        "index_dives_for_eq_ranges": true,
                        "rowid_ordered": false,
                        "using_mrr": false,
                        "index_only": false,
                        "rows": 1,
                        "cost": 2.21,
                        "chosen": true
                      }
                    ] /* range_scan_alternatives */,
                    "analyzing_roworder_intersect": {
                      "usable": false,
                      "cause": "too_few_roworder_scans"
                    } /* analyzing_roworder_intersect */
                  } /* analyzing_range_alternatives */,
                  "chosen_range_access_summary": {
                    "range_access_plan": {
                      "type": "range_scan",
                      "index": "idx_name_age_position",
                      "rows": 1,
                      "ranges": [
                        "zzz < name"
                      ] /* ranges */
                    } /* range_access_plan */,
                    "rows_for_plan": 1,
                    "cost_for_plan": 2.21,
                    "chosen": true
                  } /* chosen_range_access_summary */
                } /* range_analysis */
              }
            ] /* rows_estimation */
          },
          {
            "considered_execution_plans": [
              {
                "plan_prefix": [
                ] /* plan_prefix */,
                "table": "`employees`",
                "best_access_path": {
                  "considered_access_paths": [
                    {
                      "rows_to_scan": 1,
                      "access_type": "range",
                      "range_details": {
                        "used_index": "idx_name_age_position"
                      } /* range_details */,
                      "resulting_rows": 1,
                      "cost": 2.41,
                      "chosen": true,
                      "use_tmp_table": true
                    }
                  ] /* considered_access_paths */
                } /* best_access_path */,
                "condition_filtering_pct": 100,
                "rows_for_plan": 1,
                "cost_for_plan": 2.41,
                "sort_cost": 1,
                "new_cost_for_plan": 3.41,
                "chosen": true
              }
            ] /* considered_execution_plans */
          },
          {
            "attaching_conditions_to_tables": {
              "original_condition": "(`employees`.`name` > 'zzz')",
              "attached_conditions_computation": [
              ] /* attached_conditions_computation */,
              "attached_conditions_summary": [
                {
                  "table": "`employees`",
                  "attached": "(`employees`.`name` > 'zzz')"
                }
              ] /* attached_conditions_summary */
            } /* attaching_conditions_to_tables */
          },
          {
            "clause_processing": {
              "clause": "ORDER BY",
              "original_clause": "`employees`.`position`",
              "items": [
                {
                  "item": "`employees`.`position`"
                }
              ] /* items */,
              "resulting_clause_is_simple": true,
              "resulting_clause": "`employees`.`position`"
            } /* clause_processing */
          },
          {
            "reconsidering_access_paths_for_index_ordering": {
              "clause": "ORDER BY",
              "steps": [
              ] /* steps */,
              "index_order_summary": {
                "table": "`employees`",
                "index_provides_order": false,
                "order_direction": "undefined",
                "index": "idx_name_age_position",
                "plan_changed": false
              } /* index_order_summary */
            } /* reconsidering_access_paths_for_index_ordering */
          },
          {
            "refine_plan": [
              {
                "table": "`employees`",
                "pushed_index_condition": "(`employees`.`name` > 'zzz')",
                "table_condition_attached": null
              }
            ] /* refine_plan */
          }
        ] /* steps */
      } /* join_optimization */
    },
    {
      "join_execution": {
        "select#": 1,
        "steps": [
          {
            "filesort_information": [
              {
                "direction": "asc",
                "table": "`employees`",
                "field": "position"
              }
            ] /* filesort_information */,
            "filesort_priority_queue_optimization": {
              "usable": false,
              "cause": "not applicable (no LIMIT)"
            } /* filesort_priority_queue_optimization */,
            "filesort_execution": [
            ] /* filesort_execution */,
            "filesort_summary": {
              "rows": 0,
              "examined_rows": 0,
              "number_of_tmp_files": 0,
              "sort_buffer_size": 262056,
              "sort_mode": "<sort_key, packed_additional_fields>"
            } /* filesort_summary */
          }
        ] /* steps */
      } /* join_execution */
    }
  ] /* steps */
}

查看trace字段可知索引扫描的成本低于全表扫描,所以mysql最终选择索引扫描

 set session optimizer_trace="enabled=off"; ‐‐关闭trace

《MySQL》第四篇 MySQL如何选择合适的索引 示例表: CREATE TABLE `t_employees` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(24) NOT NULL DEFAULT '' COMMENT '姓名', `age` int(11) NOT NULL DEFAULT '0' COMMENT '年龄', `position` varchar(20) NOT NULL DEFAULT '' COMMENT '职位', `hire_time` timestamp NOT 阅读详情

相关推荐

sentinel——SLC数据下载、DEM数据下载拼接、精密轨道数据下载方法

Sentinel——SLC数据下载、DEM数据下载、精密轨道数据下载方法 SLC数据下载 网址:https://search.asf.alaska.edu DEM数据下载 1 手动下载 http://srtm.csi.cgiar.org/srtmdata/ 3.在SARscape中使用下载好的DEM 将下载好的DEM放在软件默认下载DEM路径下(默认路径是C:\Users<用户名&g...

u011322358的博客 2万+

MySQL如何选择索引

MySQL中一张表其实是可以支持多个索引的。但是,你写SQL语句的时候,并没有主动指定使用哪个索引。也就是说,使用哪个索引是由MySQL来确定的。我们先建一个简单的表,表里有a、b两个字段,并分别建上索引然后,我们往表t中插入10万行记录,取值按整数递增,即:(1,1,1),(2,2,2),(3,3,3) 直到(100000,100000,100000)。接下来,我们分析一条SQL语句:图1 使用explain命令查看语句执行情况。

世之奇伟、瑰怪,非常之观,常在于险远,而人之所罕至焉,故非有志者不能至也。 1935

FAST_LIO_ROS2 可以用gazebo仿真吗?

摘要:FAST_LIO_ROS2可与Gazebo仿真环境兼容,通过订阅Gazebo模拟的激光雷达和IMU数据实现SLAM建图。已有开源项目(如pb_rm_simulation)验证了该方案,支持导航模式切换与真实机器人移植。关键步骤包括环境配置、传感器话题匹配及参数调试,需注意版本兼容性与数据噪声处理。相关教程提供了从环境搭建到三维建图的完整流程。

专注 激光SLAM, 目标检测, 欢迎关注, 分享交流! 1138

MySQL的索引如何选择?底层原理是什么?

在底层实现上,MySQL 的索引采用的是 B-tree 数据结构,通过将索引数据存储在内存中,避免了频繁的磁盘 I/O 操作,从而提高了查询效率。对于字符串类型的字段,索引的长度应该尽可能地短,因为较长的索引可能会增加索引的存储空间和查询时间。索引的选择性:索引的选择性是指索引中不同值的数量占总记录数的比例,选择性越高,查询数据的效率就越高。数据表的大小:对于小型的数据表,可以为每个经常使用的字段创建索引,而对于大型的数据表,需要更谨慎地选择索引,以避免索引过多导致索引维护成本过高。

长风破浪会有时的博客 486

APO的全面进化之路(2):走向IBP、建设端到端供应链计划体系

前一篇记录阐述了在供应链计划(Supply Chain Planning)领域里SAP的关键产品APO的不断进化之路,即部分产品从APO进化到S/4HANA,本篇将继续阐述进化之路上的另一大中坚产品力量SAP-IBP(Integrated Business Planning)。作为SAP数字化供应链(Digital Supply Chain)中供应链计划SCP的左膀右臂,S/4HANA与IBP共同完善了计划域的完整闭环。本篇作为收尾,在先谈对IBP产品的个人认知之前,特别是在当今这个IT产品迭代多、技术革新

ChampaignWolf的专栏 5232

ComfyUI-controlnet控制出图

提供加载预处理器节点。

Bu2n的博客 5497

MySQL 索引选择详解

索引基数表示在某个索引列中,不同值的数量。可以使用。

lenyan~的博客 1440

【WRFDA教程第一期】运行观测预处理程序(OBSPROC)

运行观测预处理程序(OBSPROC)

WW、forever的博客 1899

MySQL优化 | 如何正确使用索引

在数据库中,索引是一种数据结构,用于提高数据的检索效率。它类似于书籍的目录,可以根据关键字快速定位到相应的数据。

devops 4261

【PCL 特征】积分图法线估计

本文介绍了基于积分图的有序点云法线估计方法。通过利用点云数据的行列式结构特性,该方法避免了传统KD树搜索,采用积分图将邻域统计运算复杂度从O(k²)降至O(1)。详细阐述了四种法线估计算法:协方差矩阵法(精度最高)、平均3D梯度法(实时性好)、平均深度变化法(适合SLAM)和简单3D梯度法(速度最快)。重点分析了积分图构建、动态窗口平滑处理、法线方向调整等关键技术,并提供了PCL实现代码示例。实验表明,不同方法在精度和速度上存在显著差异,可根据具体应用场景选择合适算法。

yijiujiusan的博客 277

AgentScope实战训练营- Java从零开始快速构建Agent完整教程

本文基于阿里巴巴开源的 AgentScope Java 框架,从零开始手把手带你构建 AI 智能体应用。内容涵盖环境搭建、基础对话、工具调用、结构化输出、多Agent流水线、Hook可观测性、会话持久化、MCP协议、RAG知识库集成、多模态工具、技能系统、Spring Boot Web部署等21个核心模块,附带完整可运行代码示例,帮助Java开发者快速掌握Agent开发全流程。

program哲学 867

从头开始搞懂 MySQL(06)索引的选择

我们已经了解了唯一索引和普通索引的区别,那么在不同的业务场景下,我们应该选择普通索引还是唯一索引呢?我们还是使用第 4 篇文章中的例子来说明,假设字段 card 上的值都不重复我们从这两种索引对查询语句和更新语句的性能影响来进行分析。

思想累积的博客 1248

再相逢【知识图谱】中文医学知识图谱CMeKG,中文产科医学知识图谱COKG | 附:图数据库Neo4j下载安装教学(遇到问题并解决) + Neo4j基本操作

本篇文章介绍知识图谱的相关知识。从便于理解的角度切入,给出知识图谱的形象化定义,并介绍了国内的中文医学知识图谱CMeKG,还以用户视角体验了中文产科医学知识图谱。目录二介绍了如何部署安装Neo4j数据库,并解决了部署过程中遇到的一些基础错误,随后介绍了Neo4j图数据库的基础操作。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 2619

Mysql选择合适的字段创建索引

如果一个字段有100万行数据,但只有2个不重复值(如性别字段,值为“男”和“女”),那么这个字段的选择性很低,单独为其创建索引意义不大。如果一个字段有100万行数据,且有90万不重复值(如用户ID字段),那么这个字段的选择性很高,适合创建索引。:如果查询的字段完全包含在索引中,MySQL可以直接使用索引而无需回表查询,这种索引称为覆盖索引。:根据实际查询的执行计划和性能瓶颈,适时调整索引策略,删除无用的索引,添加新的索引。:如果已经有一个复合索引,那么覆盖该复合索引的前缀列的索引是冗余的。

weixin_44984196的博客 1001

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

MySQL索引优化:选择合适的索引类型

MySQL索引优化:选择合适的索引类型

土豆的专栏 869

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【13】MySQL如何选择合适的索引?

查询条件:为经常出现在 WHERE、JOIN、ORDER BY 和 GROUP BY 等子句中的列创建索引。列的基数:对于高基数(unique 值多)的列创建索引,而低基数列则不建议创建索引。数据量:大表中的查询需要索引来提高效率,而小表中的索引影响可能不大。查询模式:根据查询的复杂性和使用频率,选择单列索引或复合索引。索引维护:定期检查索引的效果,删除不再需要的索引,避免索引过多带来负担。

qq_35320456的博客 1476

MySQL选择合适的索引,看完你就懂了!

MySQL选择正确合适的索引,通俗易懂!🎉

qq_56158663的博客 1454

MySQL如何选择合适的索引

先来看一个栗子 EXPLAIN select * from employees where name > 'a'; 如果用name索引查找数据需要遍历name字段联合索引树,然后根据遍历出来的主键值去主键索引树里再去查出最终数据,成本比全表扫描还高。可以用覆盖索引优化,这样只需要遍历name字段的联合索引树就可以拿到所有的结果。 EXPLAIN select name,age,p...

weixin_31351409的博客 620

MySQL如何根据查询类型选择合适索引?

本文探讨了MySQL数据库如何根据不同类型查询选择合适的索引以优化性能。文章首先指出索引对查询效率的重要性,随后详细分析了三种常见查询的索引选择策略:对于普通查询推荐使用覆盖索引和范围索引;聚合查询应考虑统计型索引和复合索引;联合查询则需根据联接条件建立适当索引。最后提出了优化建议,包括定期性能分析、创建覆盖索引、按业务需求选择索引结构,以及避免过度索引和碎片化问题。通过合理选择索引类型和方法,可显著提升MySQL数据库的查询性能和响应速度。

2501_90410679的博客 43

MySql如何选择合适的索引

EXPLAIN SELECT * from t_pay_invoice where supplier_code >= ‘GYS00001’; 如果用idx_supplier_code索引需要遍历supplier_code字段索引树,然后还需要根据遍历出来的主键值去主键索引树里再去查出最终数据,成本比全表扫描还高,可以用覆盖索引优化,这样只需要遍历supplier_code字段的索引树就能拿到所有结果,如下: EXPLAIN SELECT supplier_code from t_pay_invoic

ex-huh001的博客 453

bit索引 mysql_MySQL如何选择合适的索引

先来看一个栗子EXPLAIN select * from employees where name > 'a';如果用name索引查找数据需要遍历name字段联合索引树,然后根据遍历出来的主键值去主键索引树里再去查出最终数据,成本比全表扫描还高。可以用覆盖索引优化,这样只需要遍历name字段的联合索引树就可以拿到所有的结果。EXPLAIN select name,age,position f...

weixin_34314939的博客 313

MySQL(57)如何选择合适的索引列?

摘要:数据库索引优化关键在于合理选择索引列。应优先选择高选择性列和频繁查询列作为索引,避免低选择性的列;对于复合查询使用复合索引,并通过覆盖索引提升性能。使用EXPLAIN分析执行计划验证索引有效性,定期优化索引设计。示例展示了如何为员工表的部门ID、薪资等字段创建索引,以减少查询扫描行数,提高性能。合理索引策略能平衡查询效率与维护成本,确保数据库高效运行。

qq_43012298的博客 579

mysql 索引多少合适_MySQL优化--选择合适的索引

MySQL中索引类型普通索引(key),唯一索引(unique key),主键索引(primary key),全文索引(fulltext key)三种索引的索引方式是一样的,只不过对索引的关键字有不同的限制:普通索引:对关键字没有限制唯一索引:要求记录提供的关键字不能重复主键索引:要求关键字唯一且不为null使用索引的优点1.可以通过建立唯一索引或者主键索引,保证数据库表中每一行数据的唯一性.2....

weixin_33544518的博客 668
上一篇: Explain详解与索引实践
下一篇: Spring源码编译过程
WhiteEmperor
博客等级 码龄7年 6粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值