MYSQL-谨慎使用 select * ?

MYSQL-谨慎使用 select * ?

      

       每次在写SELECT查询语句的时候,都需要用怀疑的眼光审视,是不是真的需要返回全部的列,确定要使用SELECT * FROM?是否确实需要返回全部结果集,确定不加LIMIT限制?

      下面对这些情况加以解析和说明,仅供参考。

 

错误方式:

     select * from TblA;

     这将取出表的全部列,会让MYSQL优化器无法完成索引覆盖扫描这类优化,还会为服务器带来额外的I/O,内存和CPU的消耗。造成系统的延迟的重头戏是网络开销,网络开销可能带来秒级的延迟,select * 会查询出不需要的、额外的数据,那么这些额外的数据在网络上进行传输,必定会造成性能延迟。假设你的table中,有一些列的类型为BLOB,TEXT等,此时,你的select *操作,就会更加缓慢,并且会造成额外的网络开销。

正确方式:

    select col1 from TblA LIMIT 10;

    在col1字段有索引的情况下,mysql是可以不用读data,直接使用index里面的值就返回结果的。但是一旦用了select *,就会有其他列需要读取,这时在读完index以后还需要去读data才会返回结果。这样就造成了额外的性能开销。如果不需要全部结果集显示,最好根据实际情况在查询后面加上LIMIT,这样MYSQL就不会查询出全部的结果集了。

 

 

错误方式二:

select * from TblA

inner join TblB USING(A_ID)

inner join TblC USING(B_ID)

WHERE TblA.id = ?;

 

这种方式将返回三个表的全部数据列,正确的方法是应该指定只取需要的某些列名称,如:

select TblA .col1,TbleB.col2  from TblA

inner join TblB USING(A_ID)

inner join TblC USING(B_ID)

WHERE TblA.ID = ?;

 

总之,查询超过实际需要的数据,然后这些多余的数据会被应用程序抛弃,这会给MYSQL服务器带来额外的福大,并增加网络开销,同时也会消耗应用服务器的CPU和内存资源。

 

当然有的人会觉得使用select * ,这样在增加列的时候,不用改sql语句,可以简化开发,可提高相同代码片段的复用性。但是如果你select 指定列,只获取自己需要的几列,表结构的修改,对你代码的影响就会小很多,另外对于其他接手你项目的人来说,看到select 指定列的方式,可读性更强,对于他们来说更好理解!所以,谨慎使用select * from!


备注:实战示例,解疑答惑。

           --不间端地思考,实时地批判你的工作!

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要安装mysql-udf-http插件,您可以按照以下步骤进行: 1. 下载mysql-udf-http插件的源代码,可以从官方网站(https://github.com/mysqludf/lib_mysqludf_http)或者其他来源下载。将源代码解压到本地目录。 2. 安装依赖项。mysql-udf-http插件需要libcurl库的支持,因此需要安装libcurl-dev包。在Ubuntu系统上,可以执行以下命令进行安装: ``` sudo apt-get install libcurl4-openssl-dev ``` 3. 编译mysql-udf-http插件。进入mysql-udf-http源代码目录,执行以下命令: ``` gcc -I /usr/include/mysql -I /usr/include -fPIC -shared -o lib_mysqludf_http.so lib_mysqludf_http.c -lcurl ``` 其中,"-I"选项用于指定MySQL和libcurl头文件的位置,"-fPIC"选项用于生成位置无关代码,"-shared"选项用于生成动态链接库,"-o"选项用于指定输出的动态链接库文件名,"-lcurl"选项用于链接libcurl库。 4. 将生成的lib_mysqludf_http.so文件复制到MySQL插件目录。在Ubuntu系统上,可以执行以下命令进行复制: ``` sudo cp lib_mysqludf_http.so /usr/lib/mysql/plugin/ ``` 5. 在MySQL中创建mysql-udf-http函数。进入MySQL控制台,执行以下命令: ``` CREATE FUNCTION lib_mysqludf_http RETURNS STRING SONAME 'lib_mysqludf_http.so'; ``` 6. 测试mysql-udf-http函数。执行以下命令: ``` SELECT lib_mysqludf_http('http://www.example.com/'); ``` 如果函数返回了正确的结果,则说明mysql-udf-http插件已经安装成功。 注意:安装mysql-udf-http插件可能会对MySQL的安全性产生影响,因此在安装之前请先评估风险。同时,安装过程中需要以root权限执行一些命令,请谨慎操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值