MySQL索引详解

主键索引

我们知道每张表一般都会有自己的主键,mysql会在主键上建立一个索引,这就是主键索引。主键是具有唯一性并且不允许为NULL,所以他是一种特殊的唯一索引。一般在建立表的时候选定。

复合索引

复合索引也叫组合索引,指的是我们在建立索引的时候使用多个字段,例如同时使用身份证和手机号建立索引,同样的可以建立为普通索引或者是唯一索引。

复合索引的使用复合最左原则。举个例子 我们使用 phone和name创建索引。

-- 创建索引的基本语法
CREATE  INDEX indexName ON table(column1(length),column2(length));
-- 例子 
CREATE INDEX idx_phone_name ON user(phone,name);

我们看下面的查询语句,

SELECT * FROM user_innodb where name = '程冯冯';
SELECT * FROM user_innodb where phone = '15100046637';
SELECT * FROM user_innodb where phone = '15100046637' and name = '程冯冯';
SELECT * FROM user_innodb where name = '程冯冯' and phone = '15100046637';

三条sql只有 2 、 3、4能使用的到索引idx_phone_name,因为条件里面必须包含索引前面的字段才能够进行匹配。而3和4相比where条件的顺序不一样,为什么4可以用到索引呢?是因为mysql本身就有一层sql优化,他会根据sql来识别出来该用哪个索引,我们可以理解为3和4在mysql眼中是等价的。


哪些列适合添加索引呢

  • 需要经常where的字段

  • 需要join连表的字段

  • 需要排序的字段

  • 需要group by的字段

查看索引方式:


SHOW INDEX FROM table_name;


使用INFORMATION_SCHEMA:

MySQL中的INFORMATION_SCHEMA数据库存储了关于数据库和表的元数据信息。你可以查询该数据库来获取索引的详细信息。执行以下命令,可以查看表的索引信息:


SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE table_schema = 'database_name' AND table_name = 'table_name';


其中,database_name是你要查看索引的数据库名,table_name是你要查看索引的表名。

除了以上方法外,还可以通过使用MySQL的命令行工具或者可视化工具,如Navicat、phpMyAdmin等来查看表的索引信息。这些工具通常都提供了直观且易于理解的界面来展示索引信息,方便用户进行查询和分析。



白俊遥博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论