MySQL常见问题及解答

发表于:2011-3-03 09:54

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:黄缙华    来源:51Testing软件测试网采编

  1.MySQL中索引、主键和唯一性的区别是什么?

  索引建立在一个或者几个字段上。建立了索引后,表中的数据就按照索引的一定规则排列。这样可以提高查询速度。

  主键是表中数据的唯一标识。不同的记录的主键值不同。例如,身份证好比主键,每个身份证号都可以唯一的确定一个人。在建立主键时,系统会自动建立一个唯一性索引。

  唯一性也是建立在表中一个或者几个字段上。其目的是为了对于不同的记录,具有唯一性的字段的值是不同的。

  2.表中建立了索引以后,导入大量数据为什么会很慢?

  对已经建立了索引的表中插入数据时,插入一条数据就要对该记录按索引排序。因此,导入大量数据的时候速度会很慢。解决这种情况的办法是,在没有任何索引的情况插入数据,然后建立索引。

  3.一个存储过程中可以调用其他的存储过程吗?

  存储过程是用户定义的SQL语句的集合。用户通过CALL语句调用已经定义好的存储过程来执行其中的SQL语句。同时,存储过程中也可以通过CALL语句来调用其他的存储过程。

  4.存储过程和存储函数的区别是什么?

  存储过程的参数有3类,分别是IN、OUT和INOUT。通过OUT、INOUT将存储过程的执行结果输出。而且存储过程中可以有多个OUT、INOUT类型的变量,可以输出多个值。

  存储函数中的参数都是输入参数。函数中的运算结果通过RETURN语句来返回。RETURN语句只能返回一个结果。

  5.存储函数和MySQL内部函数有什么区别?

  存储函数是用户自己定义的函数。并且通过调用来执行函数中的SQL语句。函数执行完成后,通过RETURN语句来返回执行结果。从原理上讲,存储函数和MySQL内部函数是一样的。只是内部函数比较常用,因此,数据库的设计者将这些函数集成到了数据库中。而且,存储函数和MySQL内部函数的调用方式是一样的。

  6.如何使用查询缓存区?

  查询缓存区可以提高查询的速度。这种方式只适用于修改操作少且经常执行相同的查询操作的情况。默认情况下,查询缓存区是禁止的,因为query_cache_size的默认值为0。query_cache_size可以设置有效的使用空间。query_cache_type可以设置查询缓冲区的开启状态,其取值为0、1或2。在my.cnf或者my.ini中加入下面的语句:

#my.cnf(Linux)或者my.ini(Windows
[mysqld]
query_cache_size=20M
query_cache_type=1

  query_cache_type取值为1时表示开启查询缓存区。在查询语句中加上SQL_NO_CACHE关键字,该查询语句将不使用查询查询缓存区。可以使用FLUSH QUERY CACHE语句来清理查询缓存区中的碎片。

  7.为什么查询语句中的索引没有发挥作用?

  在很多情况下,虽然查询语句中使用了索引,但是索引并没有发挥作用。例如,在WHERE条件的LIKE关键字匹配的字符串以“%”开头,这种情况下索引不会起作用。WHERE条件中使用OR关键字来连接多个查询条件,如果有一个条件没有使用索引,那么其他的索引也不会起作用。如果使用多列索引时,多列索引的第一个字段没有使用,那么这个多列索引也不起作用。根据这些情况,必须对这些语句进行相应的优化。

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号