首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
object
install
perl
php7
byte
datetime
select
flutter
hashcode
web
list
post
chat
buffer
split
client
usb
nodejs
runtime
range
const
header
config
hashtable
heatmap
export
command
python3
bit
copy
python
iostream
text
int
uml
cookie
merge
dll
timezone
solr
version
cSharp
include
httpclient
instance
loops
schema
process
search
audio
timestamp
less
hook
require
erlang
php5
stream
plugins
regex
replace
ip
actionscrip
join
jsp
emoji
foreach
controller
import
java
uri
js
tags
settings
filter
c语言
express
node.js
case
future
当前位置:
开发笔记
>
编程语言
> 正文
PHP开发者常犯的10个MySQL错误更正剖析
作者:手机用户2602904231 | 来源:互联网 | 2018-03-14 10:47
最近看到一篇文章:《PHP开发者常犯的10个MySQL错误》,发现文中不少内容陈旧,随着时间推移技术发展变化而变得不适用。为了防止误导新手,特本着与时俱进的精神写出此文,绝非对原文作者的不尊重
1.使用MyISAM而不是InnoDB
完全错误,反驳理由:
首先原文说MyISAM是默认使用的,而实际上到了MySQL 5.5.x,InnoDB已经成为了默认的表引擎。
另外,简单的使用InnoDB不是解决所有问题的方法,盲目的使用甚至会使应用性能下降10%乃至40%。
最佳方法还是针对具体业务具体处理,例如论坛中版块表,新闻分类表,各种码表等长时间不操作的表,还是要用性能优异的MyISAM引擎。
而需要用到事务处理的例如用户、账目、流水等严格要求数据完整性和时序性的,则需要用InnoDB引擎,并且应用也要用好事务处理机制。当然,事务处理必然要带来大量的性能损耗,但是这在简单高并发应用上是必须的。
最后,外键约束在公共web互联网应用上一般是不用的,因为他会严重影响性能。数据完整性还是靠程序员或者应用架构本身的健壮来维护。而正规的第三范式只是在企业内部MIS系统和12306这种网站上使用。
2.使用PHP的mysql方法
不完全错,但要酌情选用:
mysqli固然好,但是不是所有的服务器都为PHP编译了mysqli的支持。
当你的应用如果是能确定只用自己部署的服务器,而应用也是完全自己开发,则mysqli是最好的选择。
但是一旦你的应用有可能部署在虚拟主机或者由其他人部署(例如分布式项目),还是老老实实使用mysql函数集吧,好好封装一下或者使用成熟框架杜绝sql注入。
3.不过滤用户输入
这一点不用说了,要么MagicQuote,要么选用成熟框架。sql注入老话题了。
4.不使用UTF-8
大部分情况下对,但也要认真考虑:
要知道,一个UTF-8字符占3个字节,所以比GBK等其他编码的文件大33%。换句话说,相同的网页用UTF-8编码如果是100KB,那么换成GBK编码则只有66KB。所以即便你的PHP确定要用UTF-8,那么前端页面也要根据情况选择需要的编码。但是,如果PHP用UTF-8,前端模版是GBK,再加上模版引擎不强大,那么转码工作够你受的。所以尽可能的选用自己需要的编码,而不是简单的选择UTF-8了事。
最后啰嗦一句:UTF-8下:strlen("我")=3,而GBK下:strlen("我")=2
5.该用SQL的地方使用PHP
同样酌情考虑:
例如,有些人习惯在建表时,默认值填写CURRENT_TIMESTAMP,用来达到注册时间、发帖时间的效果。 或者在时间判断的SQL语句中,写类似SELECT x FROM tab1 WHERE regdate 正确做法是:不要使用MySQL的任何时间函数,而是在应用里计算时间。如果是分布式应用,一定要有时间服务器来统一管理时间。
而文中说的一些MySQL数学函数 ,也是要慎用。因为在大型应用中,数据库的负担往往是最大的,而复杂的WHERE语句又是造成慢查询的元凶。所以,要把计算尽可能的放在廉价的、不影响全局稳定的应用服务器上,而不是核心数据库上。
6.不优化查询
这点也不用说了,大型应用上甚至不允许使用各种JOIN,哪怕生写两条查询,查回来在用PHP合并数据。
7.使用错误的数据类型
INT,TinyINT,VARCHAR,CHAR,TEXT这些字段类型的合理选用无可厚非。
而Date、DateTime、TIMESTAMP这三种类型,在大型应用中是绝对不可以使用的,而是要用INT(10) UNSIGNED代替。
一个是性能,另外就是应用中尤其是PHP对UNIX_TIMESTAMP时间戳的转化实在太方便了。用Date要输出各种时间格式反而麻烦。
8.在SELECT查询中使用*
共勉
9.索引不足或者过度索引
索引是必须的,但是如果索引都解决不了的查询,考虑memcache或者nosql解决方案吧。
10.不备份
这条是作者凑数么?
11.另外:不考虑其他数据库
这条相当正确。应用中不仅要针对应用选择其他数据库,甚至还要针对具体的业务类型,在同一套应用中并行使用多种数据库。哪怕不是数据库,而是其他各种缓存、内存存储等解决方案。
mysql
程序员
php
服务器
分布式
sql
注入
nosql
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
perl
Android 新闻App的本地服务器搭建教程
本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ...
[详细]
蜡笔小新 2023-12-14 17:15:19
web
如何限制php数据库链接数和连接超时时间?
本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ...
[详细]
蜡笔小新 2023-12-14 14:06:10
post
MySQL中的MVVC多版本并发控制机制的应用及实现
本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ...
[详细]
蜡笔小新 2023-12-11 13:09:19
web
揭秘阿里云WAF背后神秘的AI智能防御体系
背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ...
[详细]
蜡笔小新 2023-12-11 01:30:52
object
MySQL笔记_MySQL笔记1|数据库17问17答
本文由编程笔记#小编为大家整理,主要介绍了MySQL笔记1|数据库17问17答相关的知识,希望对你有一定的参考价值。 ...
[详细]
蜡笔小新 2023-10-17 23:53:15
web
浅解XXE与Portswigger Web Sec
XXE与PortswiggerWebSec相关链接:博客园安全脉搏FreeBufXML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ...
[详细]
蜡笔小新 2023-10-17 16:52:48
web
Java工程师书单(初级,中级,高级)
简介怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序 ...
[详细]
蜡笔小新 2023-10-16 19:11:34
web
【转】腾讯分析系统架构解析
TA(TencentAnalytics,腾讯分析)是一款面向第三方站长的免费网站分析系统,在数据稳定性、及时性方面广受站长好评,其秒级的实时数据更新频率也获得业界的认可。本文将从实 ...
[详细]
蜡笔小新 2023-10-16 19:05:20
select
MySQL数据库简介与基本语法
目录一、MySQL数据库1.简介2.用管理员身份登录3.密码相关操作4.SQL与NoSQL5.数据库重要概念二、MySQL基本语句1.基于库的增删改查2.基于表的增删改查3.基于记 ...
[详细]
蜡笔小新 2023-10-13 11:43:58
post
在Ubuntu中安装MongoDB
nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ...
[详细]
蜡笔小新 2023-10-13 10:01:51
web
搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ...
[详细]
蜡笔小新 2023-12-14 17:03:58
web
延迟注入工具(python)的SQL脚本
本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ...
[详细]
蜡笔小新 2023-12-12 10:36:42
web
svnWebUI:一款现代化的svn服务端管理软件
svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ...
[详细]
蜡笔小新 2023-12-11 11:01:10
web
javascript和java的关系,JavaScript和java的关系
Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ...
[详细]
蜡笔小新 2023-12-11 04:03:31
select
解决方案_记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案
篇首语:本文由编程笔记#小编为大家整理,主要介绍了记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案相关的知识,希望对你有一定的参考价值。 ...
[详细]
蜡笔小新 2023-10-13 13:12:29
手机用户2602904231
这个家伙很懒,什么也没留下!
Tags | 热门标签
object
install
perl
php7
byte
datetime
select
flutter
hashcode
web
list
post
chat
buffer
split
client
usb
nodejs
runtime
range
const
header
config
hashtable
heatmap
export
command
python3
bit
copy
RankList | 热门文章
1
ICV:车载毫米波雷达市场有望在2023年突破45亿美元!
2
mysql怎么清空表并且从0开始计数
3
mysql 的重要参数,监控需要
4
梦断代码 体会(一)
5
英伟达深度学习推理引擎TensorRT,现在开源了
6
笔记本触摸板没反应怎么办 笔记本触摸板没反应解决教程
7
大学课本答案大全
8
Apache+tomcat+redis 集群架构问题
9
惠普HP Photosmart C6240 打印机驱动
10
消息中间件使用场景
11
10、深入理解计算机系统笔记:存储器层次结构,高速缓存存储器(2)
12
Excel表格运行后提示错误代码1004的解决办法
13
51CTO网友感谢信:昨天以940分的成绩顺利通过NE考试 在此特地感谢网工泡泡
14
PGXZ腾讯全功能分布式关系数据集群
15
mysql创建数据库错误,提示已存在 求助?
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有