MySQL自定义函数、视图、索引

MySQL视图

创建视图:(虚拟表)
create or replace view 名称 as 
select ...(查询语句)

MySQL自定义函数
只有一个返回值,不能返回结果集,可以在SQL语句中调用自定义函数function
delimiter // 
drop function if exists getname;
create function getname(studentid int)
-- 定义返回类型
returns varchar(20)
begin 
-- 声明变量
    declare studentname varchar(20);
    select sname into studentname from student where sid=studentid;
-- 设置返回值
    return studentname;
end;//

delimiter ;
-- 调用自定义函数,并对列命名
select getname(1) as name;

索引

优点:
1、所有的MySql列类型(字段类型)都可以被索引,也就是可以给任意字段设置索引
2、大大加快数据的查询速度

缺点:
1、创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加
2、索引也需要占空间,我们知道数据表中的数据也会有最大上线设置的,如果我们有大量的索引,索引文件可能会比数据文件更快达到上线值
3、当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度。

使用原则:
通过上面说的优点和缺点,我们应该可以知道,并不是每个字段度设置索引就好,也不是索引越多越好,而是需要自己合理的使用。
1、对经常更新的表就避免对其进行过多的索引,对经常用于查询的字段应该创建索引,
2、数据量小的表最好不要使用索引,因为由于数据较少,可能查询全部数据花费的时间比遍历索引的时间还要短,索引就可能不会产生优化效果。
3、在一同值少的列上(字段上)不要建立索引,比如在学生表的"性别"字段上只有男,女两个不同值。相反的,在一个字段上不同值较多可是建立索引

Mysql索引主要有两种结构:B+Tree索引和Hash索引
Hash
MySQL中,只有Memory(Memory表只存在内存中,断电会消失,适用于临时表)存储引擎显示支持Hash索引,是Memory表的默认索引类型
hsah索引把数据的索引以hash形式组织起来,因此当查找某一条记录的时候,速度非常快。当时因为是hash结构,每个键只对应一个值,而且是散列的方式分布。所以它并不支持范围查找和排序等功能
B+Tree
B+tree是mysql使用最频繁的一个索引数据结构,是Inodb和Myisam存储引擎模式的索引类型
相对Hash索引,B+树在查找单条记录的速度比不上Hash索引,但是因为更适合排序等操作,所以他更受用户的欢迎。毕竟不可能只对数据库进行单条记录的操作。

Mysql常见索引有:主键索引、唯一索引、普通索引、全文索引、组合索引
1.普通索引index :加速查找
2.唯一索引
    主键索引:primary key :加速查找+约束(不为空且唯一)
    唯一索引:unique:加速查找+约束 (唯一)
3.联合索引
    -primary key(id,name):联合主键索引
    -unique(id,name):联合唯一索引
    -index(id,name):联合普通索引
4.全文索引fulltext :用于搜索很长一篇文章的时候,效果最好。
5.空间索引spatial

原文地址:https://www.cnblogs.com/snzd9958/p/10127247.html

时间: 2024-10-16 11:41:59

MySQL自定义函数、视图、索引的相关文章

MySQL 自定义函数CREATE FUNCTION实例

分享一个MySQL 自定义函数CREATE FUNCTION的实例.mysql> delimiter $$mysql> CREATE FUNCTION myFunction-> (in_string VARCHAR(255),-> in_find_str VARCHAR(20),-> in_repl_str VARCHAR(20))->-> RETURNS VARCHAR(255)-> BEGIN-> DECLARE l_new_string VARC

数据库系列之mysql 自定义函数function,函数和存储过程的区别

mysql 自定义函数function,函数和存储过程的区别 https://blog.csdn.net/u010365819/article/details/80470448 1.MySQL自定义函数简介 在MySQL中使用自定义函数也需要相应的要求,语法如下, 创建新函数: Create function function_name(参数列表) returns返回值类型 函数体内容 相关说明, 函数名:应该合法的标识符,并且不应该与已有的关键字冲突.一个函数应该属于某数据库,可以使用db_n

java mysql自定义函数UDF之调用c函数

正如sqlite可以定义自定义函数,它是通过API定义c函数的,不像其他,如这里的mysql.sqlite提供原生接口就可以方便的调用其他语言的方法,同样的mysql也支持调用其它语言的方法. google "mysql call c function"发现一片文章 MySQL User Defined Functions  This tutorial explains what an User Defined Function (UDF) is, what it does and w

MySQL 自定义函数

自定义函数 创建自定义函数 CREATE FUNCTION function_name RETURNS {STRING | INTERGER | REAL | DECIMAL} routine_body 关于函数体 函数体由合法的SQL语句构成 函数体可以是简单的SELECT或INSERT语句 函数体如果为复合结构则使用BEGIN...END语句 复合结构可以包含声明,循环,控制结构 删除函数 drop function if exists function_name;

MYSQL自定义函数实现表中递归层次的展现

1.现在以菜单表为例,在数据库中创建表test_menu. 2.在表中创建一些实例数据 现在的菜单层次为cd_1与cd_2为一级菜单,cd_1下分为cd_1_1与cd_1_2两个二级菜单,cd_1_1下有个三级菜单cd_1_1_1,目录结构如下 cd_1 cd_1_1 cd_1_1_1 cd_1_2 cd_2 3.创建自定义函数 4.查询菜单层次 在此,菜单的各层次就很清晰的展现出来了.

mysql自定义函数--得到字符串中最后一个分隔符前面的内容

工作中使用到一些特殊的字符串,比如'50-1-1-2-3',当需要得到'50-1-1-2'时可使用以下自定义函数 DELIMITER $$ USE `mydb`$$ DROP FUNCTION IF EXISTS `get_content_before_last_separator`$$ CREATE DEFINER=`root`@`%` FUNCTION `get_content_before_last_separator`(charStr VARCHAR(200),separatorStr 

mysql自定义函数

与vba交互不方便python写,做一个很简单的 有了就更新,没有就插入表的函数. 用的是navicat的工具 参数: IN yahoo_code varchar(20) , IN begin_date char(10), IN end_date char(10) 函数内容: BEGIN    DECLARE stockArea VARCHAR(20);select b.marketName into @stockArea from Instruments a LEFT JOIN Markets

mysql自定义函数与过程中写法的注意事项

1 BEGIN 2 #Routine body goes here... 3 /* 4 update szzx_goods_common set gc_id=i where gc_name=(SELECT gc_name from szzx_goods_class where gc_id=i); 5 */ 6 DECLARE i,goodsid int(11); 7 declare goodsname,img varCHAR(200); 8 set i=104; 9 WHILE i<1815 d

MySQL自定义函数递归查询

用于递归查找Id(通过parentId关联)参数为int 类型的值: CREATE DEFINER=`root`@`%` FUNCTION `getChildList`(rootId INT) RETURNS text CHARSET utf8 BEGIN DECLARE sTemp text; DECLARE sTempChd text; SET sTemp = '$'; SET sTempChd =cast(rootId as CHAR); WHILE sTempChd is not nul