SQL优化—小试牛刀

你是否也遇见过这样的问题:打开一个网页界面,慢的要死,原本以为是自己网的问题,却发现打开其他的网页非常快。如果你遇见过这种问题,很有可能就是和你的SQL有关。

最近在做库房项目就遇到了这样的问题,打开一个界面至少需要15s以上,就这个问题也听过几个用户的埋怨:这个系统做的我不想再用第二次!系统反应慢确实是一个特别恶心的事情,别说用户了,我们在测试的时候也很难受,所以近日我们集中解决了这个问题。库房项目小组一共优化了将近100条SQL语句,优化完之后的SQL语句测试执行速度全部降低到0.1s以内!

我们来谈一谈SQL优化的相关内容吧。
小编也是刚刚接触SQL优化的内容,也就是一个小白。
先说一说小编在库房中用到的SQL优化的内容吧。

  1. 将视图改为本地表
SELECT
	*
FROM
	(
		SELECT
			*
		FROM
			(
				SELECT
					T_BorrowLog.itemNo,
					T_Item.itemName,
					T_Category.categoryName,
					T_BorrowLog.number,
					T_BorrowLog.purpose,
					T_Storage.storageName,
					T_BorrowLog.positionID,
					t_user.userName AS userName,
					t_user.mail AS mail,
					T_BorrowLog.lendingDate,
					T_BorrowLog.returnDate,
					T_BorrowLog. STATUS,
					T_BorrowLog.remark,
					T_BorrowLog.applicant,
					T_BorrowLog.storageID,
					T_BorrowLog.op,
					T_BorrowLog.lendingTime,
					T_Item.isConsumables,
					T_BorrowLog.isDel
				FROM
					T_BorrowLog
				INNER JOIN T_Item ON T_BorrowLog.itemNo = T_Item.itemNo
				INNER JOIN T_Category ON T_Item.categoryID = T_Category.categoryID
				LEFT JOIN t_user ON T_BorrowLog.op = t_user.userID
				INNER JOIN T_Storage ON T_BorrowLog.storageID = T_Storage.storageID
			) AS V_MyAppliCation
		WHERE
			applicant = @applicant
		AND isDel = 0
		ORDER BY
			STATUS,
			isConsumables
	) AS aaa
ORDER BY
	CASE
WHEN STATUS = '已借出' THEN
	0
ELSE
	CASE
WHEN STATUS = '借出审批中' THEN
	1
ELSE
	CASE
WHEN isConsumables = '非消耗品' THEN
	3
ELSE
	4
END
END
END

在这个SQL语句中,我把视图v_user全部替换成了本地表t_user,查询速度从30s降低到0.037秒。能够很显然的看出来,数据库在查询视图的过程中浪费了太多的时间,但是将视图换为本地表之虽然速度快了,但是还是有一些其他的问题。我觉得这个SQL语句还可以优化,小编毕竟刚刚接触,相信在以后的学习中会把这个SQL语句再次优化

  1. 添加索引
    索引相当于图书的目录,数据库可以根据目录中的页码快速找到所需的内容。
    下面来收一下,MySQL数据库如何建立索引。
    第一步:在MySQL数据库中找到要添加索引的表,右击选择设计表选项。

    第二步:进入设计表界面之后,选择索引栏

    第三步:给索引起一个名字,注意按照命名规则

    第四步:索引类型选择Normal

    第五步:索引放法选择BTREE

    好了,索引建立完毕。这样就可以大大加快你的查询检索速度,但是要正确使用索引,因为所以要占物理空间,当我们进行数据的增、删、改操作的时候,索引也要动态的维护,这会降低我们对数据的维护速度。

关于SQL优化,这只是冰山一角,小编会再接再厉的,加油。

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值