mysql数据库如何建立索引(数据库怎么创建索引)

mysql数据库如何建立索引,数据库怎么创建索引内容导航:mysql如何建立索引mysql数据库怎么创建索引MySQL数据库优化技术之索引使用技巧总结数据库索引建立不能建在什么地一、mysql如何建立索引我们可以通过查看索引的属性来判断创建索引的方法。查看索引的语法格式如下:SHOWINDEXFROM<表名>[FROM<数据库

mysql数据库如何建立索引,数据库怎么创建索引

内容导航:

  • mysql如何建立索引
  • mysql数据库怎么创建索引
  • MySQL数据库优化技术之索引使用技巧总结
  • 数据库索引建立不能建在什么地
  • 一、mysql如何建立索引

    我们可以通过查看索引的属性来判断创建索引的方法。查看索引的语法格式如下:SHOW INDEX FROM <表名> [ FROM
    <数据库名>]语法说明如下:<表名>:指定需要查看索引的数据表名。<数据库名>:指定需要查看索引的数据表所在的数据库,可省略。比如,SHOW INDEX
    FROM student FROM test; 语句表示查看 test 数据库中 student 数据表的索引。示例使用 SHOW INDEX
    语句查看《MySQL创建索引》一节中 tb_stu_info2 数据表的索引信息,SQL 语句和运行结果如下所示。mysql> SHOW INDEX
    FROM tb_stu_info2\G1. row Table: tb_stu_info2Non_unique: 0Key_name:
    heightSeq_in_index: 1Column_name: heightCollation: ACardinality: 0Sub_part:
    NULLPacked: NULLNull: YESIndex_type: BTREEComment:Index_comment:1 row in set
    (0.03 sec)其中各主要参数说明如下:参数 说明Table 表示创建索引的数据表名,这里是 tb_stu_info2 数据表。Non_unique
    表示该索引是否是唯一索引。若不是唯一索引,则该列的值为 1;若是唯一索引,则该列的值为 0。Key_name 表示索引的名称。Seq_in_index
    表示该列在索引中的位置,如果索引是单列的,则该列的值为 1;如果索引是组合索引,则该列的值为每列在索引定义中的顺序。Column_name
    表示定义索引的列字段。Collation 表示列以何种顺序存储在索引中。在 MySQL 中,升序显示值“A”(升序),若显示为
    NULL,则表示无分类。Cardinality
    索引中唯一值数目的估计值。基数根据被存储为整数的统计数据计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL
    使用该索引的机会就越大。Sub_part
    表示列中被编入索引的字符的数量。若列只是部分被编入索引,则该列的值为被编入索引的字符的数目;若整列被编入索引,则该列的值为 NULL。Packed
    指示关键字如何被压缩。若没有被压缩,值为 NULL。Null 用于显示索引列中是否包含 NULL。若列含有 NULL,该列的值为
    YES。若没有,则该列的值为 NO。Index_type 显示索引使用的类型和方法(BTREE、FULLTEXT、HASH、RTREE)。Comment
    显示评注。

    二、mysql数据库怎么创建索引

    普通索引 添加INDEXALTER TABLE table_name ADD INDEX index_name ( column
    )下面演示下给user表的name字段添加一个索引mysql数据库如何创建索引mysql数据库如何创建索引主键索引 添加PRIMARY KEYALTER
    TABLE table_name ADD PRIMARY KEY ( column
    )mysql数据库如何创建索引mysql数据库如何创建索引唯一索引 添加UNIQUEALTER TABLE table_name ADD UNIQUE
    ( column )mysql数据库如何创建索引全文索引 添加FULLTEXTALTER TABLE table_name ADD FULLTEXT
    ( column)mysql数据库如何创建索引如何添加多列索引ALTER TABLE table_name ADD INDEX index_name
    ( column1, column2, column3 )mysql数据库如何创建索引mysql创建数据库命令: databases
    //显示数据库 database student(数据库名) //创建数据库student student //进入student数据库 table
    studinfo(表名) (sno int primary key,sage int(2)) ………… // 创建表studinfo
    table //显示表 ………….. database student //删除student数据库

    三、MySQL数据库优化技术之索引使用技巧总结

    本文实例总结了MySQL数据库优化技术的索引用法。分享给大家供大家参考,具体如下:

    这里紧接上一篇《MySQL数据库优化技术之配置技巧总结》,进一步分析索引优化的技巧:

    (七)表的优化

    1. 选择合适的数据引擎

    MyISAM:适用于大量的读操作的表

    InnoDB:适用于大量的写读作的表

    2.选择合适的列类型

    使用 SELECT * FROM TB_TEST PROCEDURE ANALYSE()可以对这个表的每一个字段进行分析,给出优化列类型建议

    3.对于不保存NULL值的列使用NOT NULL,这对你想索引的列尤其重要

    4.建立合适的索引

    5.使用定长字段,速度比变长要快

    (八)建立索引原则

    1.合理使用索引

    一个Table在一次query中只能使用一个索引,使用EXPLAIN语句来检验优化程序的操作情况

    使用analyze帮助优化程序对索引的使用效果做出更准确的预测

    2.索引应该创建在搜索、排序、归组等操作所涉及的数据列上

    3.尽量将索引建立在重复数据少的数据列中,唯一所以最好

    例如:生日列,可以建立索引,但性别列不要建立索引

    4.尽量对比较短的值进行索引

    降低磁盘IO操作,索引缓冲区中可以容纳更多的键值,提高命中率

    如果对一个长的字符串建立索引,可以指定一个前缀长度

    5.合理使用多列索引

    如果多个条件经常需要组合起来查询,则要使用多列索引(因为一个表一次查询只能使用一个索引,建立多个单列索引也只能使用一个)

    6.充分利用最左前缀

    也就是要合理安排多列索引中各列的顺序,将最常用的排在前面

    7.不要建立过多的索引

    只有经常应用于where,order by,group by中的字段需要建立索引.

    8.利用慢查询日志查找出慢查询(log-slow-queries, long_query_time)

    (九)充分利用索引

    1.尽量比较数据类型相同的数据列

    2.尽可能地让索引列在比较表达式中独立, WHERE mycol < 4 / 2 使用索引,而WHERE mycol * 2 < 4不使用

    3.尽可能不对查询字段加函数,

    如:WHERE YEAR(date_col) < 1990改造成WHERE date_col < ‘1990-01-01’

    WHERE TO_DAYS(date_col) – TO_DAYS(CURDATE()) < cutoff 改造成WHERE date_col <
    DATE_ADD(CURDATE(), INTERVAL cutoff DAY)

    4.在LIKE模式的开头不要使用通配符

    5.使用straight join可以强制优化器按照FROM子句的次序来进行联结,可以select straight
    join,强制所有联结,也可以select * from a straight join b强制两个表的顺序.

    6.使用force index强制使用指定的索引.如 select * from song_lib force index(song_name) order
    by song_name比不用force index效率高

    7.尽量避免使用MySQL自动类型转换,否则将不能使用索引.如将int型的num_col用where num_col=’5′

    (十)SQL语句的优化

    1.创建合适的统计中间结果表,降低从大表查询数据的几率

    2.尽量避免使用子查询,而改用连接的方式.例如:

    SELECT , (SELECT MAX(created) FROM posts WHERE author_id = ) AS
    latest_postFROM authors a

    可以改成:

    SELECT , MAX() AS latest_postFROM authors AS aINNER JOIN posts p ON ( =
    ***.author_id)GROUP BY song_id from song_lib where singer_id in(select
    singer_id from singer_libwhere first_char=’A’) limit 2000

    改成:

    select song_id from song_lib ainner join singer_lib b on _id=_id and
    first_char=’A’ limit 2000

    3.插入判断重复键时,使用ON DUPLICATE KEY UPDATE :
    复制代码 代码如下:insert into db__today(user_id,song_id,action_count) values(1,1,1) ON
    DUPLICATE KEY UPDATE action_count=action_count+1;

    4.避免使用游标

    游标的运行效率极低,可以通过增加临时表,运用多表查询,多表更新等方式完成任务,不要使用游标.

    (十一)使用Explain分析SQL语句使用索引的情况

    当你在一条SELECT语句前放上关键词EXPLAIN,MySQL解释它将如何处理SELECT,提供有关表如何联结和以什么次序联结的信息,借助于EXPLAIN,可以知道什么时候必须为表加入索引以得到一个使用索引来寻找记录的更快的SELECT,你也能知道优化器是否以一个最佳次序联结表。为了强制优化器对一个SELECT语句使用一个特定联结次序,增加一个STRAIGHT_JOIN子句。

    EXPLAIN命令的一般语法是:EXPLAIN 如:explain select * from a inner join b on =

    EXPLAIN的分析结果参数详解:

    :这是表的名字。

    :连接操作的类型。

    system:表中仅有一条记录(实际应用很少只有一条资料的表)

    const:表最多有一个匹配行,用于用常数值比较PRIMARY KEY或UNIQUE索引的所有部分时,

    如:

    select * from song_lib where song_id=2

    (song_id为表的primary key)

    eq_ref:对于每个来自于前面的表的行组合,从该表中用UNIQUE或PRIMARY KEY的索引读取一行,

    如:
    复制代码 代码如下:select * from song_lib a inner join singer_lib b on _id=_id
    (b的type值为eq_ref)

    ref:对于每个来自于前面的表的行组合,从该表中用非UNIQUE或PRIMARY KEY的索引读取一行

    如:
    复制代码 代码如下:select * from song_lib a inner join singer_lib b on _name=_name

    复制代码 代码如下:select * from singer_lib b where
    singer_name=’ccc’(b的type值为ref,因为_name是普通索引)

    ref_or_null:该联接类型如同ref,但是添加了MySQL可以专门搜索包含NULL值的行,

    如:
    复制代码 代码如下:select * from singer_lib where singer_name=’ccc’ or singer_name is
    null

    index_merge:该联接类型表示使用了索引合并优化方法

    Key: 它显示了MySQL实际使用的索引的名字。如果它为空(或NULL),则MySQL不使用索引。

    key_len: 索引中被使用部分的长度,以字节计。

    :ref列显示使用哪个列或常数与key一起从表中选择行

    : MySQL所认为的它在找到正确的结果之前必须扫描的记录数。显然,这里最理想的数字就是1。

    :这里可能出现许多不同的选项,其中大多数将对查询产生负面影响。一般有:

    using where:表示使用了where条件

    using filesort: 表示使用了文件排序,也就是使用了order by子句,并且没有用到order by
    里字段的索引,从而需要额外的排序开销,所以如果出现using filesort就表示排序的效率很低,需要进行优化,比如采用强制索引的方法(force
    index)

    更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL索引操作技巧汇总》、《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》、《MySQL数据库锁相关技巧汇总》及《MySQL常用函数大汇总》

    希望本文所述对大家MySQL数据库计有所帮助。

    四、数据库索引建立不能建在什么地

    答:不应该创建索引的的这些列具有下列特点:第一,对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。第二,对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。第三,对于那些定义为text,image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。第四,当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引。诚心为你解答,给个好评吧亲,谢谢了

    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/104420.html

    (0)
    robot
    上一篇 2022-04-17
    下一篇 2022-04-17

    相关推荐

    • 前端设计是什么(web前端设计是什么)

      前端设计是什么,web前端设计是什么内容导航:web前端设计是干什么的什么是前端设计应用软件开发前端设计是什么前端ui设计是什么一、web前端设计是干什么的Web前端开发工程师是一个很新的职业,在国内乃至国际上真正开始受到重视的时间不超过10年。Web前端开发是从网页制作

      2022-04-30
      0
    • Hadoop与虚拟现实技术的交互作用

      Hadoop与虚拟现实技术可以相互配合,从而提高数据处理和分析的效率。以下是两者之间可能的交互作用:数据处理:Hadoop可以用于处理大规模的数据,虚拟现实技术可以帮助用户更直观地理解和分析这些数据。通过将Hadoop处理的数据可视化展示在虚拟现实环境中,用户可以更容易地发现数据之间的关联和趋势。数据可视化:虚拟现实技术可以提供更丰富的数据可视化方式,例如3D图表、动态数据展示等。结合Hadoop

      2024-02-29
      0
    • 3d材质球不显示贴图怎么办(xsmp材质库贴图不显示)

      导入模型贴图丢失的解决方案大家好,很多时候我们找的模型在很多素材网上可以找的到,我们就直接下载下来,准备放在我们要使用的方案上。然而当我们合并进我们的方案上再去渲染时,就会发现之前模型里的贴图全都显示不了了有两种方法解决第一种:按shift+T,弹出

      2021-08-24 技术经验
      0
    • tomcat允许跨域访问怎么配置

      要配置Tomcat允许跨域访问,可以按照以下步骤进行操作:打开Tomcat的安装目录,找到conf文件夹。在conf文件夹下找到web.xml文件,并用文本编辑器打开。找到以下代码块:<

      2024-01-23
      0
    • dbeaver删除数据怎么恢复

      在DBeaver中删除数据后,如果没有进行备份操作,恢复数据可能会比较困难。以下是一些可能的方法来尝试恢复已删除的数据:使用数据库的事务日志:一些数据库系统(如MySQL)可以启用事务日志(binlog),通过分析这些日志文件可以还原删除的数据。但这需要一定的技术知识和操作。使用数据库备份:如果你有数据库的备份文件,可以尝试将备份文件恢复到另一个数据库中,然后从中提取所需数据。使用数据恢复工具:有

      2024-03-30
      0
    • Oracle中的视图是什么

      在Oracle数据库中,视图是一种虚拟表,它是由一个或多个表的列组成的查询结果集。视图可以像表一样被查询,但实际上并不存储数据,而是根据查询定义的规则动态生成数据。视图是一种方便的方式来组织和管理数据,可以简化复杂的查询和提高数据安全性。在Oracle中,视图可以被用于查询、更新、插入和删除数据,可以在视图上创建索引,也可以在视图上定义触发器。

      2024-03-03
      0