常见MySQL错误用法有哪些 小白怎么学Web前端

1038 篇文章 2 订阅
190 篇文章 0 订阅

常见MySQL错误用法有哪些?小白怎么学Web前端?无论是前端开发还是后台应用,都需要掌握数据库相关的知识,而MySQL是企业常用的数据库之一。对于一个Web前端小白来说,在完成HTML+CSS的基础学习后,他们还需要学习MySQL相关操作,下面列举几种比较常见的MySQL错误用法,希望大家能够引以为鉴。

1、隐式转换

SQL语句中查询变量和字段定义类型不匹配是另一个常见的错误。比如下面的语句:

mysql> explain extended SELECT *

FROM my_balance b

WHERE b.bpn = 14000000123

AND b.isverified IS NULL ;

mysql> show warnings;

| Warning | 1739 | Cannot use ref access on index ‘bpn’ due to type or collation conversion on field ‘bpn’

其中字段bpn的定义为varchar(20),MySQL的策略是将字符串转换为数字之后再比较。函数作用于表字段,索引失效。

上述情况可能是应用程序框架自动填入的参数,而不是程序员的原意。现在应用框架很多很繁杂,使用方便的同时也小心它可能给自己挖坑。

2、混合排序

MySQL不能利用索引进行混合排序,但在某些场景,还是有机会使用特殊方法提升性能的。

SELECT *

FROM my_order o

INNER JOIN my_appraise a ON a.orderid = o.id

ORDER BY a.is_reply ASC,

a.appraise_time DESC

LIMIT 0, 20

由于is_reply只有0和1两种状态,我们按照上面的方法重写后,执行时间从1.58秒降低到2毫秒。

SELECT *

FROM ((SELECT *

FROM my_order o

INNER JOIN my_appraise a

ON a.orderid = o.id

AND is_reply = 0

ORDER BY appraise_time DESC

LIMIT 0, 20)

UNION ALL

(SELECT *

FROM my_order o

INNER JOIN my_appraise a

ON a.orderid = o.id

AND is_reply = 1

ORDER BY appraise_time DESC

LIMIT 0, 20)) t

ORDER BY is_reply ASC,

appraisetime DESC

LIMIT 20;

3、EXISTS语句

MySQL对待EXISTS子句时,仍然采用嵌套子查询的执行方式。如下面的SQL语句:

SELECT *

FROM my_neighbor n

LEFT JOIN my_neighbor_apply sra

ON n.id = sra.neighbor_id

AND sra.user_id = ‘xxx’

WHERE n.topic_status < 4

AND EXISTS(SELECT 1

FROM message_info m

WHERE n.id = m.neighbor_id

AND m.inuser = ‘xxx’)

AND n.topic_type <> 5

去掉exists更改为join,能够避免嵌套子查询,将执行时间从1.93秒降低为1毫秒。

SELECT *

FROM my_neighbor n

INNER JOIN message_info m

ON n.id = m.neighbor_id

AND m.inuser = ‘xxx’

LEFT JOIN my_neighbor_apply sra

ON n.id = sra.neighbor_id

AND sra.user_id = ‘xxx’

WHERE n.topic_status < 4

AND n.topic_type <> 5

注意:

1)数据库编译器产生执行计划,决定着SQL的实际执行方式。但是编译器只是尽力服务,所有数据库的编译器都不是尽善尽美的。

2)了解数据库编译器的特性,才能避规其短处,写出高性能的SQL语句。

3)程序员在设计数据模型以及编写SQL语句时,要把算法的思想或意识带进来。

4)编写复杂SQL语句要养成使用WITH语句的习惯,简洁且思路清晰的SQL语句也能减小数据库的负担。

如果你想了解更多MySQL数据库知识,或者你想快速成为合格的Web前端工程师,可以选择专业的学习,让你快速系统的学好技能!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值