ホームページ php教程 php手册 数据库优化设计

数据库优化设计

Jun 13, 2016 am 09:40 AM
aspnet ソフトウェアプログラミング

  很多时候,我们在项目中,可能会随着需求的不断更改,我们需要在原有的库表结构中增加字段,从而满足我们的业务需求。

  举一个简单的例子:

    我需要一张数据库表,用来存储某个网站的用户信息。该用户信息需要包括(帐号是否是活跃帐号、帐号是否绑定邮箱、帐号是否购买过产品、帐号是否过期....等等),一般情况下,我们可能会这么设计这张库表:

  

<span CREATE</span> <span TABLE</span> <span '</span><span ACCOUNT</span><span '</span><span  (
      `ID` </span><span int</span>(<span 22</span>)  <span NOT</span> <span NULL</span> AUTO_INCREMENT, <span --</span><span 自增id</span>
      `F001` <span TINYINT</span>(<span 1</span>) <span NOT</span> <span NULL</span>, <span --</span><span 是否活跃(1:是/0:否)</span>
      `F002` <span TINYINT</span>(<span 1</span>) <span NOT</span> <span NULL</span>, <span --</span><span 是否绑定 (1:是/0:否)</span>
      `F003`  <span TINYINT</span>(<span 1</span>) <span NOT</span> <span NULL</span>, <span --</span><span 是否购买产品 (1:是/0:否)</span>
      `F004`  <span TINYINT</span>(<span 1</span>) <span NOT</span> <span NULL</span>, <span --</span><span 是否过期 (1:是/0:否)</span>
      <span PRIMARY</span> <span KEY</span>(<span '</span><span ID</span><span '</span><span )                  
) ENGINE</span><span =</span>InnoDB AUTO_INCREMENT<span =</span><span 1</span> <span DEFAULT</span> CHARSET<span =</span>utf8;
ログイン後にコピー

  如果按照以上方法进行设计,那么当需求变更,如:增加一个字段,帐号是否有效。那么我们就需要再增加一个字段`F005`,这样会导致管理起来非常麻烦,当新增字段时,需要去更新所有或者历史数据,很容易导致数据丢失。

  那么,怎么去解决这个问题,让数据字段间的关联影响尽可能的降低。现在有一种办法就是,将这些字段整合全部放到一个字段中。如:`FLAG`字段 按10进制进行存储(第一位:1:活跃,0:非活跃。第二位:1:绑定,2:未绑定。第三位:1:购买过产品,0:未购买....),解释一下:如果这个字段的值是5,转换成二进制是 101,第一位是1,第二位0,第三位1.那么就表示该帐号是“活跃、未绑定、且购买过产品”。这种方式有什么好处呢,好处在于各个类型之间的关联关系很小,不会因为更新一个字段类型而影响了其他字段。那么,这样设计,该如何查询呢? 按位与,具体情况可以举一个例子,当我需要查询所有购买过产品,而且活跃的帐号,也即(第一位和第三位为1),其他位我们填0,即101=5:

  sql语句查询:

    

<span SELECT</span> <span *</span> <span FROM</span> ACCOUNT <span WHERE</span> F005<span &</span><span 5</span><span ></span><span 0</span>;
ログイン後にコピー

  以上sql语句就能查询出购买过产品而且活跃的帐号。

  那么,更新修改的时候只需要在后台程序中将各二进制位更新为需求的值就好了,例如,刚才的购买过且活跃,即101,要更改为购买过,但不是活跃的话,那么就用 (5&1)=1,从而实现将第三位置0。这里提供一个PHP函数可以很好的处理该程序业务。

  

<?<span php
</span><span /*</span><span *
 * 取按位与要写入的数据
 * @param  $param 原值
 * @param  $postData  提交的数据key=>value,key必须从1开始的数据,value必须为0或者(key-1)次方数 key代表位
 </span><span */</span>
<span function</span> getExtValue(<span $param</span> = 0,<span $postData</span> = <span array</span><span ()){
    </span><span if</span>(!<span empty</span><span $postData</span><span ){
        </span><span foreach</span>(<span $postData</span> <span as</span> <span $key</span>=><span $value</span><span ){
            </span><span $tmp1</span> = <span pow</span>(2,(<span $key</span>-1<span ));
            </span><span if</span> (<span empty</span>(<span $key</span>) || !<span is_numeric</span>(<span $key</span>) || !<span is_numeric</span>(<span $value</span>) || (<span $value</span> != 0 && <span $value</span> !=<span $tmp1</span><span )){
                </span><span continue</span><span ;
            }
            </span><span $param</span> = (<span $param</span> & (0xffff^<span $tmp1</span>)) | <span $value</span><span ;
        }
    }
    </span><span return</span> <span $param</span><span ;
}</span>
ログイン後にコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Vue.js と ASP.NET の組み合わせは、Web アプリケーションのパフォーマンスの最適化と拡張のためのヒントと提案を提供します。 Vue.js と ASP.NET の組み合わせは、Web アプリケーションのパフォーマンスの最適化と拡張のためのヒントと提案を提供します。 Jul 29, 2023 pm 05:19 PM

Vue.js と ASP.NET の組み合わせは、Web アプリケーションのパフォーマンスの最適化と拡張のためのヒントと提案を提供します。Web アプリケーションの急速な開発に伴い、パフォーマンスの最適化は開発者にとって不可欠かつ重要なタスクになっています。人気のフロントエンド フレームワークとして、Vue.js を ASP.NET と組み合わせることで、より優れたパフォーマンスの最適化と拡張を実現できます。この記事では、いくつかのヒントと提案を紹介し、いくつかのコード例を示します。 1. HTTP リクエストの削減 HTTP リクエストの数は、Web アプリケーションの読み込み速度に直接影響します。合格

生成 AI がソフトウェア開発を変える 10 の方法 生成 AI がソフトウェア開発を変える 10 の方法 Mar 11, 2024 pm 12:10 PM

翻訳者 | Chen Jun によるレビュー | Chonglou 1990 年代、ソフトウェア プログラミングというと、通常、エディタを選択し、コードを CVS または SVN コード ベースにチェックインし、コードを実行可能ファイルにコンパイルすることを意味していました。 Eclipse や Visual Studio などの対応する統合開発環境 (IDE) は、プログラミング、開発、ドキュメント化、構築、テスト、展開、その他のステップを完全なソフトウェア開発ライフ サイクル (SDLC) に統合できるため、開発者の作業効率が向上します。近年、人気のクラウド コンピューティングと DevSecOps 自動化ツールにより、開発者の包括的な能力が向上し、より多くの企業がソフトウェア アプリケーションを開発、展開、保守することが容易になりました。今日、生成 AI は次世代の開発です

ASP.NET プログラムにおける MySQL 接続プールの使用法と最適化手法 ASP.NET プログラムにおける MySQL 接続プールの使用法と最適化手法 Jun 30, 2023 pm 11:54 PM

ASP.NET プログラムで MySQL 接続プールを正しく使用し、最適化するにはどうすればよいですか?はじめに: MySQL は、高いパフォーマンス、信頼性、使いやすさを特徴とする、広く使用されているデータベース管理システムです。 ASP.NET 開発では、データ ストレージに MySQL データベースを使用することが一般的な要件です。データベース接続の効率とパフォーマンスを向上させるには、MySQL 接続プールを正しく使用し、最適化する必要があります。この記事では、ASP.NET プログラムで MySQL 接続プールを正しく使用し、最適化する方法を紹介します。

ASP.NETプログラムでMySQLに再接続するにはどうすればよいですか? ASP.NETプログラムでMySQLに再接続するにはどうすればよいですか? Jun 29, 2023 pm 02:21 PM

ASP.NETプログラムでMySQLに再接続するにはどうすればよいですか? ASP.NET 開発では、MySQL データベースを使用するのが非常に一般的です。ただし、ネットワークまたはデータベース サーバーの理由により、データベース接続が中断されたりタイムアウトになったりする場合があります。この場合、プログラムの安定性と信頼性を確保するために、接続が切断された後に接続を再確立する必要があります。この記事では、ASP.NET プログラムで MySQL 接続を再接続する方法を紹介します。必要な名前空間を最初に参照するには、コード ファイルの先頭でそれらを参照します。

Vue.js と ASP.NET の組み合わせにより、エンタープライズ レベルのアプリケーションの開発と展開が可能になります。 Vue.js と ASP.NET の組み合わせにより、エンタープライズ レベルのアプリケーションの開発と展開が可能になります。 Jul 29, 2023 pm 02:37 PM

Vue.js と ASP.NET の組み合わせにより、エンタープライズ レベルのアプリケーションの開発と展開が可能になります。今日の急速に発展するインターネット テクノロジ分野では、エンタープライズ レベルのアプリケーションの開発と展開がますます重要になっています。 Vue.js と ASP.NET は、フロントエンドとバックエンドの開発で広く使用されている 2 つのテクノロジであり、これらを組み合わせることで、エンタープライズ レベルのアプリケーションの開発と展開に多くの利点をもたらします。この記事では、コード例を通じて、Vue.js と ASP.NET を使用してエンタープライズ レベルのアプリケーションを開発およびデプロイする方法を紹介します。まず、インストールする必要があります

ASP.NETプログラムでMySQL接続プールを正しく構成して使用する方法は? ASP.NETプログラムでMySQL接続プールを正しく構成して使用する方法は? Jun 29, 2023 pm 12:56 PM

ASP.NETプログラムでMySQL接続プールを正しく構成して使用する方法は?インターネットの発展とデータ量の増加に伴い、データベースへのアクセスと接続の需要も増加しています。データベースのパフォーマンスと安定性を向上させるために、接続プーリングは不可欠なテクノロジーになっています。この記事では、データベースの効率と応答速度を向上させるために、ASP.NET プログラムで MySQL 接続プールを正しく構成および使用する方法を主に紹介します。 1. コネクションプーリングの概念と機能 コネクションプーリングはデータベースコネクションを再利用する技術であり、プログラムの冒頭で使用されます。

ASP.NET での MySQL 接続プールのトランザクション パフォーマンスの使用と最適化 ASP.NET での MySQL 接続プールのトランザクション パフォーマンスの使用と最適化 Jun 30, 2023 pm 12:12 PM

ASP.NET プログラムで MySQL 接続プールのトランザクション パフォーマンスを正しく使用し、最適化するにはどうすればよいですか? ASP.NET プログラムでは、データベース トランザクションは非常に重要な部分です。トランザクションにより、データベースの一貫性と整合性が確保されると同時に、パフォーマンスも向上します。 MySQL データベースを使用する場合、接続リソースを管理し、パフォーマンスを最適化するために接続プールを使用することが不可欠です。まず、MySQL 接続プールの概念を簡単に理解しましょう。接続プールは、接続グループのバッファ プールです。

aspnet の組み込みオブジェクトとは何ですか? aspnet の組み込みオブジェクトとは何ですか? Nov 21, 2023 pm 02:59 PM

ASP.NET の組み込みオブジェクトには、「リクエスト」、「レスポンス」、「セッション」、「サーバー」、「アプリケーション」、 「HttpContext」、「Cache」、「Trace」、「Cookie」、および「Server.MapPath」: 1. リクエスト、クライアントによって発行された HTTP リクエストを示します; 2. レスポンス: Web サーバーによって返された HTTP 応答を示します。クライアントなど

See all articles