首頁 後端開發 php教程 PHP开发者常犯的10个MySQL错误更正剖析_php技巧

PHP开发者常犯的10个MySQL错误更正剖析_php技巧

May 17, 2016 am 09:13 AM
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.另外:不考虑其他数据库

  这条相当正确。应用中不仅要针对应用选择其他数据库,甚至还要针对具体的业务类型,在同一套应用中并行使用多种数据库。哪怕不是数据库,而是其他各种缓存、内存存储等解决方案。
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1268
29
C# 教程
1248
24
Unknown column 'column_name' in 'field list' - 如何解決MySQL報錯:欄位清單中的未知列 Unknown column 'column_name' in 'field list' - 如何解決MySQL報錯:欄位清單中的未知列 Oct 05, 2023 am 10:44 AM

標題:Unknowncolumn'column_name'in'fieldlist'-如何解決MySQL報錯:欄位清單中的未知列,需要具體程式碼範例在使用MySQL資料庫進行查詢或操作時,有時候會遇到這樣的報錯資訊:"Unknowncolumn' column_name'in'fieldlist'",即在欄位清單中存在未知欄位的錯誤。這通常

mysql初始化資料庫失敗怎麼解決 mysql初始化資料庫失敗怎麼解決 Apr 14, 2024 pm 07:12 PM

若要解決MySQL資料庫初始化失敗問題,請遵循下列步驟:檢查權限並確保使用有適當權限的使用者。如果資料庫已存在,請刪除它或選擇不同的名稱。如果表格已存在,請刪除它或選擇不同的名稱。檢查SQL語句是否有文法錯誤。確認MySQL伺服器正在運作且可連線。驗證您使用的是正確的連接埠號碼。查看MySQL日誌檔案或錯誤代碼查找器以取得其他錯誤的詳細資訊。

如何處理MySQL連線錯誤1049? 如何處理MySQL連線錯誤1049? Jun 29, 2023 am 09:50 AM

如何處理MySQL連線錯誤1049? MySQL是一種常用的關聯式資料庫管理系統,許多開發人員和系統管理員都會使用MySQL來儲存和管理資料。然而,在使用MySQL時,有時會遇到連線錯誤1049的問題。本文將介紹連接錯誤1049的原因,並給出解決這個問題的幾種方法。 MySQL連線錯誤1049通常是由於資料庫不存在或資料庫名稱錯誤所導致的。當連接到MySQL服務

MySQL連線錯誤1017怎麼辦? MySQL連線錯誤1017怎麼辦? Jun 30, 2023 am 11:57 AM

如何處理MySQL連線錯誤1017? MySQL是一種開源的關聯式資料庫管理系統,被廣泛應用於網站開發和資料儲存。然而,在使用MySQL時,可能會遇到各種各樣的錯誤。其中一個常見的錯誤是連線錯誤1017(MySQLerrorcode1017)。連線錯誤1017表示資料庫連線失敗,通常是因為使用者名稱或密碼錯誤而造成的。當MySQL無法使用提供的使用者名稱和密碼驗

PHP會傳回上一個 MySQL 操作中的錯誤訊息的數位編碼 PHP會傳回上一個 MySQL 操作中的錯誤訊息的數位編碼 Mar 22, 2024 pm 12:31 PM

這篇文章將為大家詳細講解有關PHP返回上一個Mysql操作中的錯誤訊息的數字編碼,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章後可以有所收穫。利用PHP回傳MySQL錯誤訊息數字編碼引言在處理mysql查詢時,可能會遇到錯誤。為了有效處理這些錯誤,了解錯誤訊息數字編碼至關重要。本文將指導您使用php取得Mysql錯誤訊息數字編碼。取得錯誤訊息數字編碼的方法1.mysqli_errno()mysqli_errno()函數傳回目前MySQL連線的最近錯誤號碼。文法如下:$erro

如何查看MySQL資料庫復原的進度 如何查看MySQL資料庫復原的進度 Feb 24, 2024 pm 12:24 PM

MySQL是一款非常常用的開源關係型資料庫管理系統,它具有穩定、高效、靈活等特點,並廣泛應用於各種類型的應用程式中。使用MySQL時,不可避免地會遇到資料庫的復原操作,如何準確地查看MySQL資料庫復原的進度成為一個比較重要的問題。 MySQL資料庫的復原進度可以透過查看MySQL的錯誤日誌來取得相關資訊。在MySQL的錯誤日誌中,會記錄所有的資料庫操作記錄

MySQL常見錯誤解決方法集錦 MySQL常見錯誤解決方法集錦 Jun 15, 2023 pm 02:58 PM

在開發中,如果經常與MySQL打交道的話,就會遇到一些常見的錯誤。有些錯誤會導致MySQL無法正常運作,有些則會影響程式的效能。以下分別介紹一些常見的MySQL錯誤及其解決方法。 MySQL伺服器無法連線到連線MySQL伺服器時,可能會遇到下列錯誤:Can'tconnecttoMySQLserveron'localhost'(10061)Ac

MySQL錯誤1171如何解決 MySQL錯誤1171如何解決 Jan 09, 2024 pm 03:59 PM

解決方法:1、檢查資料類型,確保你在建立或修改索引的列中的資料類型是相容的;2、避免使用函數或表達式,在建立索引的列上避免使用函數或表達式;3、使用明確類型轉換,如果必須在索引的列上使用函數或表達式,確保使用了明確類型轉換;4、查看MySQL版本和文檔,以了解關於索引和資料類型的更多資訊;5、最佳化查詢,考慮重新評估和優化你的查詢,確保有效地使用索引;6、考慮使用其他工具或方法等等

See all articles