ホームページ データベース mysql チュートリアル 有关mysql优化的一些东东整理

有关mysql优化的一些东东整理

Jun 07, 2016 pm 05:55 PM
mysqlの最適化

有关mysql优化的一些东东,自己整理的,网上搜集的,供朋友们学习参考吧

1.查询帮助 ? contents
2.使用合成的散列值,分离BLOB或者TEXT
3.货币使用定点数(decimal或者numberic)
4.sql_mode?
5.order by rand() limit 1000;
6.优化show status like 'Com' Com_select Com_insert等查看插入多还是查询多
7.Handler_read_key 的值将很高,这个值代表了一个行被索引值读的次数,很低的值表明增加索引得到的性能改善不高,因为索引并不经常使用.Handler_read_rnd_next 的值高则意味着查询运行低效,并且应该建立索引补救。这个值的含义是在数据文件中读下一行的请求数。如果你正进行大量的表扫描,该值较高。通常说明表索引不正确或写入的查询没有利用索引.
8.定期分析表 ANALYZE TABLE CHECK TABLE CHECKSUM TABLE
9.优化表 OPTIMIZE TABLE
10.导入大数据:Myisam ALTER TABLE tblname DISABLE KEYS loading the data ALTER TABLE tblname ENABLE KEYS;
Innodb SET UNIQUE_CHECKS=0 SET AUTOCOMMIT=0
11.优化insert:LOAD DATA INFILE replace ignore
12.优化group by ORDER BY NULL
13.show status like 'Table%'; show status like 'innodb_row_lock%';
14.CREATE TABLE innodb_monitor(a INT) ENGINE=INNODB;
15.影响Mysql 性能的重要参数:
key_buffer_size : 说明:键缓存(变量key_buffer_size) 被所有线程共享;服务器使用的其它缓存则根据需要分配。此参数只适用于myisam 存储引擎。
table_cache:数据库中打开表的缓存数量。table_cache 与max_connections 有关。例如,对于200 个并行运行的连接,应该让表的缓至少有200 * N,这里N 是可以执行的查询的一个联接中表的最大数量。还需要为临时表和文件保留一些额外的文件描述符。
innodb_buffer_pool_size:缓存InnoDB 数据和索引的内存缓冲区的大小。你把这个值设得越高,访问表中数据需要得磁盘I/O 越少。

innodb_flush_log_at_trx_commit:0|1|2
innodb_additional_mem_pool_size:1M
innodb_table_locks:0|1
innodb_lock_wait_timeout:
innodb_support_xa:通过该参数设置是否支持分布式事务,默认值是ON 或者1,表示支持分布式事务。如果确认应用中不需要使用分布式事务,则可以关闭这个参数,减少磁盘刷新的次数并获得更好的InnoDB 性能。
innodb_doublewrite:
innodb_log_buffer_size:
innodb_log_file_size:

1.数据库的设计
尽量把数据库设计的更小的占磁盘空间.
1).尽可能使用更小的整数类型.(mediumint就比int更合适).
2).尽可能的定义字段为not null,除非这个字段需要null.(这个规则只适合字段为KEY的情形)
3).如果没有用到变长字段的话比如varchar,那就采用固定大小的纪录格式比如char.(CHAR 总是比VARCHR快)
4).表的主索引应该尽可能的短.这样的话每条纪录都有名字标志且更高效.
5).只创建确实需要的索引。索引有利于检索记录,但是不利于快速保存记录。如果总是要在表的组合字段上做搜索,那么就在这些字段上创建索引。索引的第一部分必须是最常使用的字段.如果总是需要用到很多字段,首先就应该多复制这些字段,使索引更好的压缩。
(这条只适合MYISAM引擎的表,对于INNODB则在保存记录的时候关系不大,因为INNODB是以事务为基础的,如果想快速保存记录的话,特别是大批量的导入记录的时候)
6).所有数据都得在保存到数据库前进行处理。
7).所有字段都得有默认值。
8).在某些情况下,把一个频繁扫描的表分成两个速度会快好多。在对动态格式表扫描以取得相关记录时,它可能使用更小的静态格式表的情况下更是如此。
(具体的表现为:MYISAM表的MERGE类型,以及MYISAM和INNODB通用的分区,详情见手册)
9).不会用到外键约束的地方尽量不要使用外键。

2.系统的用途
1).及时的关闭对MYSQL的连接。
2).explain 复杂的SQL语句。(这样能确定你的SELECT 语句怎么优化最佳)
3).如果两个关联表要做比较话,做比较的字段必须类型和长度都一致.(在数据庞大的时候建立INDEX)
4).LIMIT语句尽量要跟order by或者 distinct.这样可以避免做一次full table scan.
5).如果想要清空表的所有纪录,建议用truncate table tablename而不是delete from tablename.
不过有一个问题,truncate 不会在事务处理中回滚。因为她要调用create table 语句。
(Truncate Table 语句先删除表然后再重建,这个是属于文件级别的,所以自然快N多)
实测例子:
song2为INNODB表。
代码如下:
mysql> select count(1) from song2;
+----------+
| count(1) |
+----------+
| 500000 |
+----------+
1 row in set (0.91 sec)
mysql> delete from song2;
Query OK, 500000 rows affected (15.70 sec)
mysql> truncate table song2;
Query OK, 502238 rows affected (0.17 sec)

6).能使用STORE PROCEDURE 或者 USER FUNCTION的时候.(ROUTINE总是减少了服务器端的开销)
7).在一条insert语句中采用多重纪录插入格式.而且使用load data infile来导入大量数据,这比单纯的indert快好多.(在MYSQL中具体表现为:INSERT INTO TABLEQ VALUES (),(),...();)
(还有就是在MYISAM表中插入大量记录的时候先禁用到KEYS后面再建立KEYS,具体表现语句:
ALTER TABLE TABLE1 DISABLE KEYS;ALTER TABLE TABLE1 ENABLE KEYS;
而对于INNNODB 表在插入前先 set autocommit=0;完了后:set autocommit=1;这样效率比较高。)
8).经常OPTIMIZE TABLE 来整理碎片.
9).还有就是date 类型的数据如果频繁要做比较的话尽量保存在unsigned int 类型比较快。

3.系统的瓶颈
1).磁盘搜索.
并行搜索,把数据分开存放到多个磁盘中,这样能加快搜索时间。
2).磁盘读写(IO)
可以从多个媒介中并行的读取数据。
3).CPU周期
数据存放在主内存中.这样就得增加CPU的个数来处理这些数据。
4).内存带宽
当CPU要将更多的数据存放到CPU的缓存中来的话,内存的带宽就成了瓶颈。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQL を通じて AVG 機能を最適化してパフォーマンスを向上させる方法 MySQL を通じて AVG 機能を最適化してパフォーマンスを向上させる方法 May 11, 2023 am 08:00 AM

MySQL の AVG 関数を最適化してパフォーマンスを向上させる方法 MySQL は、多くの強力な機能を備えた人気のあるリレーショナル データベース管理システムです。 AVG 関数は平均値の計算に広く使用されていますが、この関数はデータ セット全体を走査する必要があるため、大規模なデータの場合にはパフォーマンスの問題が発生します。この記事では、MySQL を通じて AVG 機能を最適化し、パフォーマンスを向上させる方法を詳しく紹介します。 1. インデックスの使用 インデックスは MySQL 最適化の最も重要な部分です。

TokiDB エンジンに基づいた MySQL の最適化: 書き込みと圧縮のパフォーマンスを向上 TokiDB エンジンに基づいた MySQL の最適化: 書き込みと圧縮のパフォーマンスを向上 Jul 25, 2023 pm 11:45 PM

TokiDB エンジンに基づく MySQL の最適化: 書き込みと圧縮のパフォーマンスの向上 はじめに: 一般的に使用されるリレーショナル データベース管理システムとして、MySQL は、ビッグ データ時代の文脈において、書き込み圧力とストレージ要件の増大に直面しています。この課題に対処するために、TokuDB エンジンが誕生しました。この記事では、TokuDB エンジンを使用して MySQL の書き込みパフォーマンスと圧縮パフォーマンスを向上させる方法を紹介します。 1.TokuDBエンジンとは何ですか? TokiDB エンジンは、大量の書き込みを処理するように設計されたビッグデータ指向のエンジンです。

MySQL の低レベルの最適化を実現する方法: SQL ステートメントの高度な最適化のためのヒントとベスト プラクティス MySQL の低レベルの最適化を実現する方法: SQL ステートメントの高度な最適化のためのヒントとベスト プラクティス Nov 08, 2023 pm 04:32 PM

MySQL は、Web アプリケーションの開発とデータ ストレージによく使用される、広く使用されているリレーショナル データベース管理システムです。実際のアプリケーションでは、MySQL の基盤となる最適化が特に重要であり、その中でも SQL ステートメントの高度な最適化がデータベースのパフォーマンスを向上させる鍵となります。この記事では、MySQL の基礎となる最適化を実装するためのヒントとベスト プラクティス、および具体的なコード例を紹介します。クエリ条件を決定する SQL ステートメントを作成するときは、まずクエリ条件を明確に定義し、ワイルドカード クエリを無制限に使用しないようにする必要があります。つまり、クエリを開くために "%" を使用しないようにします。

電子商取引アプリケーションにおける MySQL の最適化とセキュリティ プロジェクトの経験の分析 電子商取引アプリケーションにおける MySQL の最適化とセキュリティ プロジェクトの経験の分析 Nov 03, 2023 am 10:42 AM

MySQL は、電子商取引の分野で広く使用されているリレーショナル データベース管理システムです。電子商取引アプリケーションでは、MySQL を最適化して保護することが重要です。この記事では、電子商取引アプリケーションにおける MySQL の最適化とセキュリティ プロジェクトの経験を分析します。 1. パフォーマンスの最適化データベース アーキテクチャ設計: 電子商取引アプリケーションでは、データベース設計が鍵となります。合理的なテーブル構造設計とインデックス設計により、データベースのクエリ パフォーマンスを向上させることができます。同時に、テーブル分割およびパーティション化テクノロジを使用すると、単一テーブル内のデータ量が削減され、クエリ効率が向上します。

MySQL 接続数管理を最適化する方法 MySQL 接続数管理を最適化する方法 Mar 16, 2024 am 08:12 AM

MySQL の接続数管理を最適化する方法 MySQL は、さまざまな Web サイトやアプリケーションで広く使用されている人気のあるリレーショナル データベース管理システムです。実際のアプリケーションプロセスでは、MySQL の接続数の管理は非常に重要な問題であり、特に同時実行性が高い状況では、接続数を合理的に管理することでシステムのパフォーマンスと安定性を向上させることができます。この記事では、MySQL の接続数管理を最適化する方法を詳細なコード例を含めて紹介します。 1. 接続数管理を理解する MySQL では、接続数とはシステムが同時に接続できる接続の数を指します。

MySQL の基盤となる最適化を実装する方法: SQL ステートメント最適化の一般的な手法と原則 MySQL の基盤となる最適化を実装する方法: SQL ステートメント最適化の一般的な手法と原則 Nov 08, 2023 pm 08:19 PM

MySQL データベースは一般的なリレーショナル データベースですが、データベース内のデータ量が増加し、クエリ要件が変化するにつれて、基盤となる最適化が特に重要になります。 MySQL の基盤となる最適化のプロセスにおいて、SQL ステートメントの最適化は重要なタスクです。この記事では、SQL ステートメントの最適化に関する一般的な手法と原則について説明し、具体的なコード例を示します。まず、SQL ステートメントの最適化では、インデックスの最適化、クエリ ステートメントの最適化、ストアド プロシージャとトリガーの最適化などの側面を考慮する必要があります。これらの側面では、

MySQL の一般的な問題に対する解決策の完全なコレクション MySQL の一般的な問題に対する解決策の完全なコレクション Jun 15, 2023 am 09:51 AM

MySQL は、大量のデータを保存および管理するために広く使用されているオープンソース データベース管理システムです。ただし、MySQL を使用すると、単純な構文エラーからより複雑なパフォーマンスの問題や不具合まで、さまざまな問題が発生する可能性があります。この記事では、MySQL の最も一般的な問題と解決策のいくつかを検討します。接続の問題 接続の問題はよくあります。 MySQL サーバーに接続できない場合は、以下の点を確認してください。 1) MySQL サーバーが起動しているかどうか 2) ネットワーク接続が正常かどうか 3) MySQ

MySQL の二重書き込みバッファリング テクノロジを適切に構成および最適化する方法 MySQL の二重書き込みバッファリング テクノロジを適切に構成および最適化する方法 Jul 25, 2023 pm 01:01 PM

MySQL の二重書き込みバッファリング テクノロジを適切に構成および最適化する方法 はじめに: MySQL の二重書き込みバッファリング テクノロジは、データのセキュリティとパフォーマンスを向上させる重要なテクノロジです。この記事では、MySQL の二重書き込みバッファリング テクノロジを適切に構成および最適化し、データをより適切に保護し、データベースのパフォーマンスを向上させる方法を紹介します。 1. 二重書き込みバッファリング テクノロジとは何ですか? 二重書き込みバッファリング テクノロジは、MySQL の I/O 最適化テクノロジであり、ディスク I/O 操作の数を大幅に削減し、データベースの書き込みパフォーマンスを向上させることができます。 MySQL が書き込み操作を実行するとき、最初に

See all articles