目錄
mysql_db使用军规:
一、表的一句话优化
1. int型不超过1000w,含char则不超过500w
2. 按时间分表,按主键取模/hash分表,按量分表
4. 拒绝text和blob类型
5. 分区的算法可以按时间
二、字段的一句话优化
2 你认识null吗?
3 业务上有关联的字段,要定义相同类型
4 选择类型请用数字、枚举
三、语句的一句话优化
1 利用explain神器来优化语句利弊
2 Truncate比delete要快
3 用join代替子查询
4 自带函数运算
5 要知道一条语句是依赖一个CPU内核的
6 不要select *
7 如果能用in,就不要用or
8 如果能用union,就不要用or
9 合理使用limit
四、索引的一句话优化
2. 不易过多
6. 要认识他们MyISAM(重搜索), Innodb(默认,事务性、重业务)
首頁 資料庫 mysql教程 为部门整理的mysql_db使用军规

为部门整理的mysql_db使用军规

Jun 07, 2016 pm 04:13 PM
mysql 使用 整理 部門

mysql_db使用军规: 1、禁止开发测试人员在IDC环境手工删除和修改数据 2、所有需求通过DB工具系统提交 3、禁止在IDC环境DB进行测试 4、IDC环境提交的sql语句一定要经过非正式环境验证,且经过explain sql;检验过执行计划有走索引 5、IDC环境库表创建统一用小

mysql_db使用军规:

1、禁止开发测试人员在IDC环境手工删除和修改数据

2、所有需求通过DB工具系统提交

3、禁止在IDC环境DB进行测试

4、IDC环境提交的sql语句一定要经过非正式环境验证,且经过"explain sql;"检验过执行计划有走索引

5、IDC环境库表创建统一用小写,库表用英文简称,力求精简

6、禁止web机器直连DB

7、每条记录要保存数据的创建和修改时间,表通常要有主键,使用innodb引擎

8、IDC环境db只授权增查改,删除权限DBA评估

9、预估和控制单表的数据量在百万以内,数据量过大需清理或分表

10、IDC环境禁止使用mysql视图,存储过程,触发器,自定义函数


一、表的一句话优化

1. int型不超过1000w,含char则不超过500w

数字和字符装不下的情况,考虑多字段。

2. 按时间分表,按主键取模/hash分表,按量分表

红包是按量来的。

3. 限制单库表的数量在万级以内

4. 拒绝text和blob类型

实在避免不了要用text和blob类型,拆表吧。或者弄成本地保存,多机器分片存储。

5. 分区的算法可以按时间

比如天、月,便于针对性的查询,命中率100%


二、字段的一句话优化

1 长度可以冗余,可适量10%左右

tinyint(1Byte)smallint(2Byte)mediumint(3Byte)int(4Byte)bigint(8Byte)认清长度,选择好类型。

2 你认识null吗?

避免使用NULL字段,因为NULL字段很难查询优化;NULL字段的索引需要额外空间;NULL字段的复合索引无效。

错误的例子:`Fpacket_name` char(32) default null。

正确的例子:`Fpacket_name` varchar(60) NOT NULL DEFAULT ''。

`Fface_value` int(10) unsigned NOT NULLDEFAULT '0'。"

3 业务上有关联的字段,要定义相同类型

相同的类型做语句操作有助于提高操作效率,减少转换成本。

4 选择类型请用数字、枚举

数字表示意思的,来替代字符串。

正确的例子:性别,0男,1女;时间用时间戳的数字形式;IP用数字型等等。


三、语句的一句话优化

1 利用explain神器来优化语句利弊

Type结果集:显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、index和all。

2 Truncate比delete要快

Delete 计数器不清零, 按行删, 慢。Truncate相当于删掉重建, 最快。批量删除最好导出有用数据,然后删掉旧表, 新表重命名。

3 用join代替子查询

Join原理,nested loop。Left Join 数据量小的在前面,Straight_JOIN。

4 自带函数运算

不要让MYSQL用自己函数,他已经很累,尽量在程序内实现,比如now(),放到程序里取到了再传入给mysql处理。更不要在mysql去处理大逻辑运算。

5 要知道一条语句是依赖一个CPU内核的

一条语句一个内核,大语句可以拆开多语句,多核机共用,还可以减少mysql锁时间。

6 不要select *

除非你查询的所有字段都要用到。。。。否则你占用这么多内存,宽带,CPU时间,IO干鸟蛋。

7 如果能用in,就不要用or

or的时间复杂度是n,in的时间复杂度是log(n)。

错误的例子:select Fpacket_name from t_account_packet where Fpacket_id =68698080 or Fpacket_id = 68711068;

正确的例子:select Fpacket_name from t_account_packet where Fpacket_id in(68698080,68711068);"

8 如果能用union,就不要用or

和上边同理

9 合理使用limit

拍拍数据一般都是自增的,所以定位的话一般都要倒序来看最近时间的。但limit又是最慢的一个倒序合理结合limit的话,能体现出更高的效率。

最近的2个批次,正确的例子:select Fpacket_id from t_account_packet order by Fpacket_id desclimit 2;

错误的思路:select count(*) from t_account_packet ; =>879446;

selectFpacket_id from t_account_packet limit 879444,879446;

最近的第2个批次,正确的例子:selectFpacket_id from t_account_packet order by Fpacket_id desc limit 1,1;"

错误的思路:select count(*) from t_account_packet ; =>879446;

selectFpacket_id from t_account_packet limit 879444,879445;

10 如果能用load data,就不要用insert

做幸运占卜师活动的时候,默认是要载入很多血型和性格相关数据的。当时用的是source+逐行insert方法导数据,或者考虑load data,它的原理是在执行load之前,会关掉索引,当load全部执行完成后,再重新创建索引。而insert的原理是:每插入一条则更新一次数据库,更新一次索引。所以要慢很多倍,具体多少倍,依赖待处理的数量级。

四、索引的一句话优化

1. 尽量选择区分度高的索引进行检索

错误的例子:name。正确的例子:id。

2. 不易过多

表数据与索引的容量比保持在1:1 ,至少一条语句中存在一个索引。

3. 索引是从左向右原则

4. 利用explain神器来执行和分析索引的覆盖

5. 不要用索引字段做计算

你见过哪个应急通道上,有自驾车站位的?

6. 要认识他们MyISAM(重搜索), Innodb(默认,事务性、重业务)

innodb主键推荐使用自增列

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡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

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

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++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教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1250
24
laravel入門實例 laravel入門實例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

MySQL和PhpMyAdmin:核心功能和功能 MySQL和PhpMyAdmin:核心功能和功能 Apr 22, 2025 am 12:12 AM

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

MySQL與其他編程語言:一種比較 MySQL與其他編程語言:一種比較 Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

解決數據庫連接問題:使用minii/db庫的實際案例 解決數據庫連接問題:使用minii/db庫的實際案例 Apr 18, 2025 am 07:09 AM

在開發一個小型應用時,我遇到了一個棘手的問題:需要快速集成一個輕量級的數據庫操作庫。嘗試了多個庫後,我發現它們要么功能過多,要么兼容性不佳。最終,我找到了minii/db,這是一個基於Yii2的簡化版本,完美地解決了我的問題。

laravel框架安裝方法 laravel框架安裝方法 Apr 18, 2025 pm 12:54 PM

文章摘要:本文提供了詳細分步說明,指導讀者如何輕鬆安裝 Laravel 框架。 Laravel 是一個功能強大的 PHP 框架,它 упростил 和加快了 web 應用程序的開發過程。本教程涵蓋了從系統要求到配置數據庫和設置路由等各個方面的安裝過程。通過遵循這些步驟,讀者可以快速高效地為他們的 Laravel 項目打下堅實的基礎。

解決MySQL模式問題:TheliaMySQLModesChecker模塊的使用體驗 解決MySQL模式問題:TheliaMySQLModesChecker模塊的使用體驗 Apr 18, 2025 am 08:42 AM

在使用Thelia開發電商網站時,我遇到了一個棘手的問題:MySQL模式設置不當,導致某些功能無法正常運行。經過一番探索,我找到了一個名為TheliaMySQLModesChecker的模塊,它能夠自動修復Thelia所需的MySQL模式,徹底解決了我的困擾。

MySQL:結構化數據和關係數據庫 MySQL:結構化數據和關係數據庫 Apr 18, 2025 am 12:22 AM

MySQL通過表結構和SQL查詢高效管理結構化數據,並通過外鍵實現表間關係。 1.創建表時定義數據格式和類型。 2.使用外鍵建立表間關係。 3.通過索引和查詢優化提高性能。 4.定期備份和監控數據庫確保數據安全和性能優化。

MySQL:解釋的關鍵功能和功能 MySQL:解釋的關鍵功能和功能 Apr 18, 2025 am 12:17 AM

MySQL是一個開源的關係型數據庫管理系統,廣泛應用於Web開發。它的關鍵特性包括:1.支持多種存儲引擎,如InnoDB和MyISAM,適用於不同場景;2.提供主從復制功能,利於負載均衡和數據備份;3.通過查詢優化和索引使用提高查詢效率。

See all articles