一些能体现个人水平的SQL语句_MySQL
一些能体现个人水平的SQL语句
作为一名小小的开发人员,刚入门的时候觉得很难,过了一段时间之后,发现很简单,很快就可以搞定很bug了。然而这并不能说明你就已经很牛掰了,只能说,你不了解其他太多的东西。应该说,数据库有几个共同的命令,select , update , insert, replace, delete , truncate, drop,只要你学会了,你就感觉你可以为所欲为了。但是在这里,我要总结一些体现水平的语句,而这些东西恰好直接体现你个人的水平和经验问题。
1、show processlist : 查看mysql的进程情况,在网站很慢的时候,你应该要想到是不是有很多死的进程或者很耗时的进程,如果确实是这样,那你应该结束到一些。 kill 99 .
执行状态分析:
Sleep状态通常代表资源未释放,如果是通过连接池,sleep状态应该恒定在一定数量范围内,实战范例:因前端数据输出时(特别是输出到用户终端)未及时关闭数据库连接,导致因网络连接速度产生大量sleep连接,在网速出现异常时,数据库too many connections挂死 Waiting for net, reading from net, writing to net
偶尔出现无妨,如大量出现,迅速检查数据库到前端的网络连接状态和流量
案例:因外挂程序,内网数据库大量读取,内网使用的百兆交换迅速爆满,导致大量连接阻塞在waiting for net,数据库连接过多崩溃Locked状态,有更新操作锁定,通常使用innodb可以很好的减少locked状态的产生,但是切记,更新操作要正确使用索引,即便是低频次更新操作也不能疏忽。如上影响结果集范例所示。在myisam的时代,locked是很多高并发应用的噩梦。所以mysql官方也开始倾向于推荐innodb。
Copy to tmp table
索引及现有结构无法涵盖查询条件,才会建立一个临时表来满足查询要求,产生巨大的恐怖的i/o压力。很可怕的搜索语句会导致这样的情况,如果是数据分析,或者半夜的周期数据清理任务,偶尔出现,可以允许。频繁出现务必优化之。
Copy to tmp table通常与连表查询有关,建议逐渐习惯不使用连表查询。
实战范例:
u 某社区数据库阻塞,求救,经查,其服务器存在多个数据库应用和网站,其中一个不常用的小网站数据库产生了一个恐怖的copy to tmp table操作,导致整个硬盘i/o和cpu压力超载。Kill掉该操作一切恢复。
Sending data
Sending data并不是发送数据,别被这个名字所欺骗,这是从物理磁盘获取数据的进程,如果你的影响结果集较多,那么就需要从不同的磁盘碎片去抽取数据,偶尔出现该状态连接无碍。回到上面影响结果集的问题,一般而言,如果sending data连接过多,通常是某查询的影响结果集过大,也就是查询的索引项不够优化。
如果出现大量相似的SQL语句出现在show proesslist列表中,并且都处于sending data状态,优化查询索引,记住用影响结果集的思路去思考。
Storing result to query cache出现这种状态,如果频繁出现,使用setprofiling分析,如果存在资源开销在SQL整体开销的比例过大(即便是非常小的开销,看比例),则说明query cache碎片较多,使用flush query cache可即时清理,也可以做成定时任务
Query cache参数可适当酌情设置。
Freeing items
理论上这玩意不会出现很多。偶尔出现无碍,如果大量出现,内存,硬盘可能已经出现问题。比如硬盘满或损坏。
i/o压力过大时,也可能出现Free items执行时间较长的情况。
Sorting for 和Sending data类似,结果集过大,排序条件没有索引化,需要在内存里排序,甚至需要创建临时结构排序。
其他还有很多状态,遇到了,去查查资料。基本上我们遇到其他状态的阻塞较少,所以不关心
2、checksum 在逻辑备份时候前后是否可以用于验证数据一致性;
load data [local] infile $filename INTO TABLE table_name TERMINATED BY ',',从文件导入数据到数据库中。
指定Windows 路径名时,使用的是斜线而不是反斜线。如果要用反斜线,必须双写。
出于安全的原因,当读取位于服务器上的文本文件时,文件必须位于数据库目录下或者可以被所有用户读取。也就是说,当对服务器上的文件执行LOAD DATA INFILE 时,用户必须获得FILE 权限。
3、索引: 不必要的索引只会占用空间和时间,建立必要索引,唯一索引,主键索引。
4、联表操作:更新,updatetable1 t1 left join table2 t2 on t1.uid=t2.uid set t1.name=t2.name,t1.desc='xxxx' where t1.date='2015-10-11';删除:delete t1,t2,t3from table1 t1 left join table2 t2 on t1.uid=t2.uid inner join table3 t3 ont2.uid = t3.uid where t1.date='2015-10-11';事务:set@@autocommit=0;

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











1. まず、携帯電話にダウンロードしたエンタープライズ WeChat ソフトウェアを開きます。ログインする際には、WeChat IDを使用する方法と携帯電話番号を使用する方法の2つを選択できます。 3. この時点で、企業管理者はバックグラウンドで携帯電話番号を追加する必要があります。そうすれば、Enterprise WeChat は携帯電話番号に基づいて企業を識別します。次に、あなたのビジネスを表示し、下の「Enter Business」オプションをクリックします。 4. 次に、ソフトウェアの機能の使用を入力できますが、最も重要なことは、管理者によってあなたの携帯電話番号が企業に追加されなければ使用できないことです。

多くのゲーマーはグラフィックス カード 3060 に非常に興味があり、3060 ディスプレイを購入したいと考えていますが、RTX3060 がどのレベルにあるのか知りません。実際、このグラフィックス カードも比較的主流のレベルにあります。 3060 グラフィックス カードのレベルは何ですか: 回答: メインストリーム レベル。この RTX3060 グラフィックス カードは、プレイヤーの間で非常に人気があり、セールも行われており、RTX30 シリーズの独自の利点を備え、非常にコスト効率が高く、ゲーム グラフィックスに対する要求が高いプレイヤーはこのグラフィックス カードを選択できます。 3060 グラフィックス カード拡張の紹介: フレーム レート: ほとんどのプレイヤーに愛されており、12 GB の大容量ビデオ メモリを備えており、非常に人気があります。 12 GB の大容量ビデオ メモリを搭載し、AAA の傑作を遅延なくスムーズに実行でき、フレーム レートは 60 に達することもあります。お金の価値: それ

今年の携帯電話市場の新星として、Kirin 9000s が大きな注目を集めています。スマートフォン市場の競争が激化する中、ファーウェイのフラッグシッププロセッサとして常に注目を集めてきたKirinシリーズ。最新のプロセッサーである Kirin 9000 はどのようなパフォーマンスを発揮するのでしょうか?そのパフォーマンスとレベルはどのようなものですか?以下では、Kirin 9000 を評価し、その長所と短所をさまざまな側面から分析します。まずパフォーマンスの観点から見ると、Kirin 9000 は高度な 5nm プロセスを使用して製造され、ARM の最新の Co

Web アプリケーションの開発に伴い、PHP 言語は Web 開発で広く使用されています。 PHP8.0 バージョンでは、新しい言語機能である multi-catch ステートメントが導入されました。マルチキャッチステートメントとは何ですか?以前の PHP バージョンでは、開発者は複数の例外タイプを処理するために複数の catch ステートメントを作成する必要がありました。たとえば、次のコード ブロックは 2 つの異なる例外の処理を示しています。

MySQL でテーブルのロックを解除するステートメントを実装するにはどうすればよいですか? MySQL では、テーブル ロックは、データの整合性と一貫性を保護するために一般的に使用されるロック メカニズムです。トランザクションがテーブルの読み取りおよび書き込みを行っている場合、他のトランザクションはテーブルを変更できません。このロック メカニズムにより、データの一貫性がある程度保証されますが、他のトランザクションがブロックされる可能性もあります。したがって、何らかの理由でトランザクションを続行できない場合は、他のトランザクションを続行できるようにテーブルのロックを手動で解除する必要があります。 MySQL はさまざまな機能を提供します

水平方向にスクロール可能なセクションは、ビューポートの幅を超えるコンテンツを表示するために使用される一般的な Web デザイン パターンです。このデザイン パターンにより、ユーザーは水平方向にスクロールでき、大きな画像、ギャラリー、タイムライン、地図、その他のコンテンツを表示するユニークで魅力的な方法が提供されます。これは、overflow-x:auto や overflow-x:scroll などの CSS プロパティを使用して実現されます。これは、水平スクロールにネイティブのブラウザー機能を使用し、デバイス間で応答します。コンテンツのナビゲーションと探索が簡単に行えます。追加のライブラリやプラグインは必要ありません。このアルゴリズムは、「コンテナ」クラスを使用してコンテナ要素を定義します。コンテナの「overflow−x」プロパティを「auto」に設定して、水平スクロールを有効にします。容器

MySQLにデータを挿入するステートメントを実装するにはどうすればよいですか? MySQL データベースを使用する場合、データの挿入は非常に基本的で一般的な操作です。データを挿入することにより、新しいレコードをデータベース テーブルに追加して、業務運営をサポートできます。この記事では、MySQL で INSERT ステートメントを使用してデータ挿入操作を実装する方法を紹介し、具体的なコード例を示します。 MySQL の INSERT ステートメントは、データベース テーブルに新しいレコードを挿入するために使用されます。基本的な構文形式は次のとおりです。 INSERTINTOt

Python は広く使用されている高級プログラミング言語で、学習が簡単で効率的かつ柔軟で、開発者に深く愛されています。 Python では、フロー制御ステートメントはプログラム ロジックの実装の重要な部分です。この記事では、Python でよく使用されるフロー制御ステートメントを紹介し、理解を深めるためのコード例を示します。 Python では、一般的なフロー制御ステートメントには条件ステートメントとループ ステートメントが含まれます。条件付きステートメントは、真または偽の条件に基づいてさまざまなコード ブロックを実行し、実行ブランチを決定および選択するために使用されます。ループステートメントは繰り返しに使用されます
