提案内容を改善するために、データベースを実行するaspプログラムの効率化
多くのユーザーはASPでのプログラミングを嫌い、ASPのプログラムは遅くて効率が悪いといつも文句を言っています。彼らはプログラムを書くためにPHPやJSPなどを使うことを好みます。実際には、"考える "の観点から問題を見ることはできませんが、実際からの問題を見る必要があります、ASPは本当に遅いので、なぜASPとMicrosoftの駅は遅くない、PHPは本当に速い、実際には、それはまだ説明の言語でもある。JSPの開発は、どこに簡単ではありませんし、JDBC - ODBCブリッジをACCESSライブラリなどを接続するために渡すには、このケースはまた、効率的ではありません。
実は、この3つの言語にはそれぞれ特徴があり、つまりメリットとデメリットがあるのです。プログラマは、常に言語が悪いと非難すべきではないとして、より自分のスキルを見てください。そこで今日は、この3つのWEB言語について、誰が良くて誰が悪いかを比較するのではなく、プログラムの実行効率を上げる方法を説明します。
その1.SQL文
WEBプログラムで最も説得力があるのは、データベース操作の部分であるはずです。今日は、SQL文の効率を上げる方法についてお話します。IDを主キーとする次のような構造のユーザーテーブルがあるとします。すでに1万件のレコードがあります。
ID int 4 自己インクリメント
名前 char 10 //名前
年齢 int 2 //年齢
Sex char 2 //性別 デフォルト値は "男性"
アドレス nvchar 255 //アドレス
キャッシュ int 4 //ポイント
Photo char 2 //写真を持っていない デフォルト値は "no "です。
PhotoUrl nvchar 255 //写真のパス
WEBデータベースオブジェクトの場合、テーブルの数は少ないほどよく、フィールドの数は少ないほどよく、フィールドが占有するバイト数は少ないほどよいです。
{ということです。
たとえば、ユーザーテーブルの性別のフィールドは、完全にビットフィールド、0または1の操作のためにすることができます、あなたは "0 "男性用、および "1 "女性のために定義することができるので、文字によって占有されるバイトの数を減らすことができますレコードたくさんまたはかなり実質的。
もう一つの例は、テーブルの写真フィールドを一切削除することで、フィールド数を減らし、その結果、読み込み速度を速めることができる。なぜなら、Photoフィールドはユーザーが写真を持っているかどうかを判断するためにのみ使用され、その判断にはPhotoUrlフィールドを安全に使用することができるためです。PhotoUrlフィールドの値が空であれば、このユーザーは写真を持っていないことを意味し、そうでなければ、写真を持っていればPhotoUrlフィールドに値があるはずで、それに応じて同じ機能を実行すればよいのです。
例えば、ユーザー名の上位10名の記録を表示したいとします。あるユーザーは次のようにします。
I=0
Set rs=conn.execute("select * from users")
Do while not rs.eof and I<=10
I=I+1
Response.write("name")&"<br>"
Rs.movenext
Loop
このコードでも上記の機能は実現できますが、本当にプログラムに落とし込むとなると効率が悪すぎます。これを実現するには、Ms SQLのtopコマンドか、Mysqlのlimitコマンドを使えばいい。
また、表示させるフィールドはユーザー名だけで、他は全く必要ないのですが、このユーザーは「select *」というコマンドで全てのフィールドの値を一度に読み込んでいたので、非常に不要であり、フィールド数が多い場合には、実行の負担が増えることになりました。そこで、"select fields "を使って、対応する操作を行うようにする。そこで、上記のプログラムは次のように修正することができます。
set rs=conn.execute("select top 10 name from users")
do while not rs.eof
response.write rs("name")&"<br>"
rs.movenext
loop
この場合、レコード数が多いと動作がかなり速くなります。
また、操作終了後、操作が不要になった場合は、必ずデータベース接続を終了してください。
rs=何も設定しない
connを設定する=何もしない
何人かの方は、そういうことなら、その方は以下のコードでUsersテーブルを表示することができますね。
Set rs=conn.execute("select name from users")
I=0
Do while not rs.eof
I=I+1
Rs.movenext
loop
set rs=nothing
実は、このコードはまだ非常に非効率的です。テーブルの行数を知るために、すべての行を繰り返し処理するのは非常に無駄なことです。次のコードでも全く同じことができます。
set rs=conn.execute("select count(id) as num from users")
I=rs("num")
セット rs=nothing
簡単でしょう?実は、count()コマンドでクエリしたいレコードの数を数えることができますし、whereで条件を追加することもできます。
ユーザーが一度にデータベース上でいくつかの操作を実行したい場合、我々はまた、あるユーザーがデータベースを操作していると別のユーザーもそれを操作している場合、データに混乱を引き起こすことが容易であり、あるいは間違ったレコード番号にデータを挿入させる、非常に深刻な結果をもたらすので、ロック解除を使用して、操作が完了した後にテーブルをロックすることに注意を払う必要があります。
ASPの運用では、データベース操作の方法として、conn.executeのストリームを直接参照する方法と、rs.openの操作を利用する方法がある。両方の操作は、それぞれの利点があり、MS SQLの操作では、前者がより使用され、それは操作の単一のストリームであるため、一般的にrs.addnewまたはrs.updateなどを使用することはできません、そのような操作は、書き込み操作にテーブルを開くために、rs.open sql,conn,3,3などの後、あなたは書き込み操作を行うことを意味し、1はそれが読み取りであるということ次の3は書き込み操作を実行できることを示して、1では読み取りの操作を示しています。
最後に、複数の文を組み合わせて、できるだけ多くのwhere条件を使用することです。例えば、男性ユーザーの上位10名をポイント順に表示する。
あるユーザーの次のコードを見てください。
set rs=conn.execute("select * from users order by cash desc")
I=0
If I<=10 and not rs.eof then
If rs("sex")='male' then
Response.write rs("name")&"<br>"
I=I+1
End if
Rs.movenext
End if
Set rs=nothing
このコードでも上記の作業は可能であるが、効率が悪すぎるし、データベースから読み込んだ文章を一回ずつ判定しなければならない。性別の判定はwhere文の中に入れることができる。
set rs=conn.execute("select top 10 name from users where sex='male' order by cash desc")
do while not rs.eof
response.write rs("name")&"<br>"
rs.movenext
loop
set rs=nothing
上記のtopコマンド、selectフィールド名、where条件を追加することで、プログラムコードを削減できるだけでなく、プログラムの実行効率も大幅に向上します。
実は、SQL言語の効率を上げる方法は他にもたくさんあるのですが、初心者や中級者の友人がよく遭遇し、気にも留めないところが、このようなところです。もっと勉強して、心を開いて、実践から経験を積み重ねられるといいですね!
この記事は、aspプログラムの実行データベースの効率化について紹介されています、より関連するaspデータベースの効率化の内容は、BinaryDevelopの過去の記事を検索してくださいまたは、次の関連記事を閲覧し続けるあなたは、将来的にもっとBinaryDevelopをサポートすることを願っています
関連
-
ASP RecordSet OpenとConnection.Executeのいくつかの違いと共有すべき詳細な内容
-
ASPで短い日付を0から長い2つの日付に書式設定する
-
asp バッチの追加・変更・削除操作のサンプルコード
-
asp(vbscript)のカスタム関数とデフォルトのパラメータコード
-
数字を漢数字(大文字の金額)に変換するASP機能
-
ASP Baidu アクティブプッシュのコード例
-
ASPでは、.NETのStringオブジェクトと同様に、文字部分に対してPadLeftとPadRightの関数が実装されています。
-
Perl の Getopt::Long モジュールを使用して、ユーザーのコマンドライン引数を受け取ります。
-
Perl 変数の使い方を説明するための Perl 構文
-
perlの尖ったブラケット演算子(<>)について
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン