mysql - php大批量插入及更新的问题
插入的问题
php操作大批量数据的时候,我想到的解决方法如下
方法一:foreach循环遍历中构造sql语句然后插入数据库
insert into xxx values (xxx,xxx,xxx)
方法二:foreach循环遍历构造sql语句,最后一次性插入
insert into xxx(field1,field2,field3)values(xxx1,xxx2,xxx3),(xxx1,xxx2,xxx3)
以上只是插入,如果要在插入的时候先判断插入的数据是否存在数据库中,那每一次插入之前都要进行一次select的操作,这样效率不高?如何优化蛤?
更新的问题
其实类似于上面的插入,update之前先select,如果存在就update,不存在就insert,这样sql语句依然很多,如何优化呢?
回复内容:
插入的问题
php操作大批量数据的时候,我想到的解决方法如下
方法一:foreach循环遍历中构造sql语句然后插入数据库
insert into xxx values (xxx,xxx,xxx)
方法二:foreach循环遍历构造sql语句,最后一次性插入
insert into xxx(field1,field2,field3)values(xxx1,xxx2,xxx3),(xxx1,xxx2,xxx3)
以上只是插入,如果要在插入的时候先判断插入的数据是否存在数据库中,那每一次插入之前都要进行一次select的操作,这样效率不高?如何优化蛤?
更新的问题
其实类似于上面的插入,update之前先select,如果存在就update,不存在就insert,这样sql语句依然很多,如何优化呢?
1- Mysql还有一种语法是 REPLACE INTO,存在就更新,否则插入
2- Mysql还有一种语法是 INSERT INTO ... ON DUPLICATE KEY UPDATE,存在唯一键键冲突就更新
3- 实际开发中大批量数据插入是很罕见的,至少1000条以下肯定不算大批量,所以如果你是想省事的话,通常你会验证一时偷懒节约了4小时所引起的麻烦够你折腾8小时这个预言。
通常大批量数据插入发生在数据从旧数据库中导入,但是这种导入通常只有一次,所以怎么认真对待都不为过,其它的比如从上传的csv文件中导入数据需要看具体的业务逻辑,比较常见的是使用try/catch进行插入,失败的数据显示出来,让用户确认覆盖,然后再update。
1)如果能保证insert肯定没有数据重复,那肯定是insert更合适
2)索引~,恰当的索引真的对提升性能有很大帮助
3)用mysql的批处理导入,对性能提升有一定帮助,但缺点是可能会丢数据。
4)把自动commit=true也就是事务关闭,每提交若干个(打比方1W条记录)之后集中commit一次,速度能有很大提升,单机差不多好点的配置1W QPS也是很轻松的
5)从新设计mysql库,读写分离,做集群,上SSD...
REPLACE 存在则删除插入 或者 DUPLICATE 存在则更新
可以用replace 就可以解决update和insert的烦恼
on duplicate key update 用这个,每不想重复的字段建唯一索引,这样就不用你查一下在选择插入还是更新了。他可以做到当重复时会自动执行UPDATE后面的语句
不一定要用REPLACE和DUPLICATE吧,可以试试:
开启事务,循环插入,如果插入失败,则改为更新.
<code><?php $db = new mysqli('127.0.0.1','user','pass','dbname',3306); $db->query('SET AUTOCOMMIT=0'); $db->query('START TRANSACTION'); //开始循环 if(!$db->query('INSERT INTO posts(id, post_title, post_content) VALUES(1,"title_1","content_1")')) { $db->query('UPDATE posts SET post_title = "title_1", post_content = "content_1" WHERE id = 1'); } //插入失败,或者没有AUTO_INCREMENT字段,或者不是INSERT语句,insert_id为0. echo $db->insert_id; $db->query('COMMIT'); $db->query('SET AUTOCOMMIT=1');</code>

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

MySQL和phpMyAdmin是強大的數據庫管理工具。 1)MySQL用於創建數據庫和表、執行DML和SQL查詢。 2)phpMyAdmin提供直觀界面進行數據庫管理、表結構管理、數據操作和用戶權限管理。

在MySQL中,外鍵的作用是建立表與表之間的關係,確保數據的一致性和完整性。外鍵通過引用完整性檢查和級聯操作維護數據的有效性,使用時需注意性能優化和避免常見錯誤。

IIS和PHP可以兼容,通過FastCGI實現。 1.IIS通過配置文件將.php文件請求轉發給FastCGI模塊。 2.FastCGI模塊啟動PHP進程處理請求,提高性能和穩定性。 3.實際應用中需注意配置細節、錯誤調試和性能優化。

MySQL和MariaDB的主要區別在於性能、功能和許可證:1.MySQL由Oracle開發,MariaDB是其分支。 2.MariaDB在高負載環境中性能可能更好。 3.MariaDB提供了更多的存儲引擎和功能。 4.MySQL採用雙重許可證,MariaDB完全開源。選擇時應考慮現有基礎設施、性能需求、功能需求和許可證成本。

多次調用session_start()會導致警告信息和可能的數據覆蓋。 1)PHP會發出警告,提示session已啟動。 2)可能導致session數據意外覆蓋。 3)使用session_status()檢查session狀態,避免重複調用。

SQL是一種用於管理關係數據庫的標準語言,而MySQL是一個使用SQL的數據庫管理系統。 SQL定義了與數據庫交互的方式,包括CRUD操作,而MySQL實現了SQL標準並提供了額外的功能,如存儲過程和触發器。

AI可以幫助優化Composer的使用,具體方法包括:1.依賴管理優化:AI分析依賴關係,建議最佳版本組合,減少衝突。 2.自動化代碼生成:AI生成符合最佳實踐的composer.json文件。 3.代碼質量提升:AI檢測潛在問題,提供優化建議,提高代碼質量。這些方法通過機器學習和自然語言處理技術實現,幫助開發者提高效率和代碼質量。

MySQL和phpMyAdmin可以通過以下步驟進行有效管理:1.創建和刪除數據庫:在phpMyAdmin中點擊幾下即可完成。 2.管理表:可以創建表、修改結構、添加索引。 3.數據操作:支持插入、更新、刪除數據和執行SQL查詢。 4.導入導出數據:支持SQL、CSV、XML等格式。 5.優化和監控:使用OPTIMIZETABLE命令優化表,並利用查詢分析器和監控工具解決性能問題。
