当前位置:首页 » 编程语言 » sql语言太长的坏处
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql语言太长的坏处

发布时间: 2022-08-07 10:09:55

‘壹’ 谁能通俗易懂的说下sql注入的危害和最简单的解决办法(php)

不是行不通了,这种万能密码是需要一定条件的

sql注入危害可大可小
大了说,可以进一步控制的你web服务器,盗取帐号密码,篡改你的web页面。
小了说,只能浏览一些已知的数据(比如删查改分别使用不同的用户可以有一定防范效果)

解决方法的话,建议使用成熟的数据库框架或者通过格式化之后在带入数据库执行。

‘贰’ SQL注入的特点与危害分别有哪些

1、广泛性:任何一个基于SQL语言的数据库都可能被攻击,很多开发人员在编写Web应用程序时未对从输入参数、Web表单、Cookie等接收到的值进行规范性验证和检测,通常会出现SQL注入漏洞。
2、隐蔽性:SQL注入语句一般都嵌入在普通的HTPP请求中,很难与正常语句区分开,所以当前许多防火墙都无法识别予以警告,而且SQL注入变种极多,攻击者可以调整攻击的参数,所以使用传统的方法防御SQL注入效果非常不理想。
3、危害大:攻击者可以通过SQL注入获取到服务器的库名、表名、字段名,从而获取到整个服务器中的数据,对网站用户的数据安全有极大的威胁。攻击者也可以通过获取到的数据,得到后台管理员的密码,然后对网页页面进行恶意篡改。这样不仅对数据库信息安全造成严重威胁,对整个数据库系统安全也有很大的影响。
4、操作方便:互联网上有很多SQL注入工具,简单易学、攻击过程简单,不需要专业的知识也可以自如运用。

‘叁’ sql中的冗余会导致什么问题急

冗余有好处, 也有坏处。
是一个要把握好一个度的问题。

冗余的好处是, 查询的时候, 可以少关联一点表。
冗余的坏处是, 多占用一些磁盘空间, 更新的时候, 要更新多一点表。

例如下面这样的体系结构:

学生表(学号,姓名)
课程表(课程号,课程名)
成绩表(学号,课程号,成绩)

上面这种情况, 成绩表中没有冗余的列,那么要查询 姓名,课程名,成绩的情况下。
需要3个表都关联了, 进行查询。

下面是有冗余的课程表
成绩表(学号,姓名,课程号,课程名,成绩)
上面这种情况, 成绩表中包含了冗余的列,那么要查询 姓名,课程名,成绩的情况下。
只需要查询一个表就可以了。

但是潜在的问题: 例如 学号为 008 的学生改名字了。
在成绩表中没有冗余的列的情况下, 简单 学生表, 修改 学号为 008 的学生的姓名即可。
而在成绩表中有冗余的列的情况下, 需要修复 学生表 与 成绩表 上面的 学号为 008 的学生的姓名。

上面只是简单的例子。
一般来说,彻底一点冗余也没有, 感觉上是很好, 但是如果遇到数据量很大,表关联又很多的情况下, 查询速度就会慢一些。
但是你要冗余得太厉害了, 那么更新数据的时候, 也是要命的。

‘肆’ sql多表查询及查询语句太长问题(aspaccess)

你这么写 sql很不科学的,建议这么写,
使用连接查询,表的别名

如:

select * from table1 t1
inner join table2 t2 on t1.zian1 = t2.zian1
inner join table3 t3 on t2.zian1 = t3.zian1
where 其他条件

‘伍’ SQL数据库和甲骨文数据库的好处和坏处求解答!

MsSqlserver优点:
1.真正的客户机/服务器体系结构
2.图形化的用户界面,使系统管理和数据库管理更加直观、简单
3.丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地
4.与WinNT完全集成,利用了NT的许多功能,如发送和接受消息,管理登录安全性等,SQL Server也可以很好地与Microsoft BackOffice产品集成。
5.有很好的伸缩性,可以跨平台使用。
6.提供数据仓库功能,这个功能只在Oracle和其他昂贵的DBMS中才有。

Oracle优点:
1.Oracle的稳定性要比Sql server好。
2.Oracle在导数据工具sqlload.exe功能比Sqlserver的Bcp功能强大,Oracle可以按照条件把文本文件数据导入.
3.Oracle的安全机制比Sql server好。
4.Sql server的易用性和友好性方面要比Oracle好。
5.在处理大数据方面Oracle会更稳定一些。
6.Sql Server在数据导出方面功能更强一些。
7.处理速度方面比Oracle快一些,和两者的协议有关.
Oracle缺点: 价格昂贵.
以下是搜集与网络中常用数据库的总结,希望大家补充~!

SqlServer:只支持微软平台,数据量不及上两者,可用性最好,但是性能不及上两者,适用于中型、小型企业及商业应用。

1. SQL SERVER 用于中小型数据库,ORACLE 用于大型数据库.
2. SQL SERVER 只能在Windows下跑,Oracle是跨平台的.
3. SQL SERVER 很平民,轻巧,Oracle很贵族,安全稳定.
1、主要在处理数据量的大小方面:sql小数据量速度快、方便。oracle慢;但海量数据处理,就非oracle莫数了。
2、操作方便性:sql操作方便简单,易上手。oracle操作麻烦、不易上手。
3、安全性:sql安全性很差(最大缺点)。oracle安全性很好。
4、移植性:sql只能在windows系统和NT系统下运行。oracle理论上可以运行在任何的系统中。
Oracle是(甲骨文)公司的数据产品。Oracle的产品可运行于很宽范围的硬件与操作系统平台上。可以安装在70种以上不同的大、中、小型机上;可在VMS、DOS、UNIX、WINDOWS等多种操作系统下工作。ORACLE产品主要包括数据库服务器、开发工具和连接产品三类。操作要比MSSQL Server复杂,同时提供GUI和命令行,在windowsNT和unix下操作相同。获得最高认证级别的ISO标准认证。

SQL Server 是 Microsoft(微软) 的数据产品,它的易用性强。有友好的用户界面。适用于C/S结构,只支持windows客户,可以用ADO,DAO,OLEDB,ODBC连接.但只能在windows 上运行,没有丝毫的开放性,而且windows平台的可靠性,安全性和伸缩性是非常有限的。多用户时性能不佳。适用于中端市场,价格也比较适中.但在安全性方面没受到任何安全认证.

‘陆’ sql语言 缺点

你可以先看一下sql
server的书,这样的书比较多。随便翻一本基础的就可以,先选择性看select
delete\update\等这些常用的语句,熟悉以后再看触发器、存储过程、自定义函数、游标等!

‘柒’ SQL语句执行很慢,怎么回事

1. 执行计划中明明有使用到索引,为什么执行还是这么慢?

2. 执行计划中显示扫描行数为 644,为什么 slow log 中显示 100 多万行?
a. 我们先看执行计划,选择的索引 “INDX_BIOM_ELOCK_TASK3(TASK_ID)”。结合 sql 来看,因为有 "ORDER BY TASK_ID DESC" 子句,排序通常很慢,如果使用了文件排序性能会更差,优化器选择这个索引避免了排序。
那为什么不选 possible_keys:INDX_BIOM_ELOCK_TASK 呢?原因也很简单,TASK_DATE 字段区分度太低了,走这个索引需要扫描的行数很大,而且还要进行额外的排序,优化器综合判断代价更大,所以就不选这个索引了。不过如果我们强制选择这个索引(用 force index 语法),会看到 SQL 执行速度更快少于 10s,那是因为优化器基于代价的原则并不等价于执行速度的快慢;
b. 再看执行计划中的 type:index,"index" 代表 “全索引扫描”,其实和全表扫描差不多,只是扫描的时候是按照索引次序进行而不是行,主要优点就是避免了排序,但是开销仍然非常大。
Extra:Using where 也意味着扫描完索引后还需要回表进行筛选。一般来说,得保证 type 至少达到 range 级别,最好能达到 ref。
在第 2 点中提到的“慢日志记录Rows_examined: 1161559,看起来是全表扫描”,这里更正为“全索引扫描”,扫描行数确实等于表的行数;
c. 关于执行计划中:“rows:644”,其实这个只是估算值,并不准确,我们分析慢 SQL 时判断准确的扫描行数应该以 slow log 中的 Rows_examined 为准。
4. 优化建议:添加组合索引 IDX_REL_DEVID_TASK_ID(REL_DEVID,TASK_ID)

优化过程:
TASK_DATE 字段存在索引,但是选择度很低,优化器不会走这个索引,建议后续可以删除这个索引:
select count(*),count(distinct TASK_DATE) from T_BIOMA_ELOCK_TASK;+------------+---------------------------+| count(*) | count(distinct TASK_DATE) |+------------+---------------------------+| 1161559 | 223 |+------------+---------------------------+

在这个 sql 中 REL_DEVID 字段从命名上看选择度较高,通过下面 sql 来检验确实如此:
select count(*),count(distinct REL_DEVID) from T_BIOMA_ELOCK_TASK;+----------+---------------------------+| count(*) | count(distinct REL_DEVID) |+----------+---------------------------+| 1161559 | 62235 |+----------+---------------------------+

由于有排序,所以得把 task_id 也加入到新建的索引中,REL_DEVID,task_id 组合选择度 100%:
select count(*),count(distinct REL_DEVID,task_id) from T_BIOMA_ELOCK_TASK;+----------+-----------------------------------+| count(*) | count(distinct REL_DEVID,task_id) |+----------+-----------------------------------+| 1161559 | 1161559 |+----------+-----------------------------------+

在测试环境添加 REL_DEVID,TASK_ID 组合索引,测试 sql 性能:alter table T_BIOMA_ELOCK_TASK add index idx_REL_DEVID_TASK_ID(REL_DEVID,TASK_ID);
添加索引后执行计划:
这里还要注意一点“隐式转换”:REL_DEVID 字段数据类型为 varchar,需要在 sql 中加引号:AND T.REL_DEVID = 000000025xxx >> AND T.REL_DEVID = '000000025xxx'

执行时间从 10s+ 降到 毫秒级别:
1 row in set (0.00 sec)
结论
一个典型的 order by 查询的优化,添加更合适的索引可以避免性能问题:执行计划使用索引并不意味着就能执行快。

‘捌’ 一大串拆分的SQL语句对数据库是否有影响

对数据库本身是没有什么影响的!
所有的SQL语句都是在缓存中解析执行,并将结果存放在缓存中的。

‘玖’ sql语句太长有什么坏处吗

不能说坏处,有很多数据库本身的结构、算法就比较复杂,语句长是很正常的。只是同等效果的语句,尽量选择精简的。还有就是书写的格式,很重要,尽量多使用分行书写。语句的效率主要体现:
1、可读性,也就是再次查看、修改sql语句时,容易阅读。
2、执行效率,如一些重复分组、重复的计算,造成的语句执行速度缓慢。