1.どのレベルが具体的かを説明する
具体的には、system、const、range、index、all
2.MySQLの最適化
-
完全なテーブルクエリを避け、最初にwhereとorderbyに関係する列にインデックスを作成することを検討してください
-
where句のフィールドのnull値の判断を回避しようとする必要があります。そうしないと、エンジンはインデックスの使用をあきらめ、テーブル全体のスキャンを実行します(フィールドのデフォルト値は0に設定できます)。
-
where句での使用は避けてください。=または<>演算子。それ以外の場合、エンジンはインデックスの使用をあきらめ、テーブル全体のスキャンを実行します。
-
条件を結合するためにまたはwhere句を使用しないようにする必要があります。そうしないと、エンジンがインデックスの使用をあきらめて、次のような完全なテーブルスキャンを実行します。selectidfrom t where num = 10 or num = 20次のようにクエリできます:select id from t where num = 10 union all select id from t where num = 20
-
nとnotinも注意して使用する必要があります。そうしないと、次のような完全なテーブルスキャンが発生します。selectidfrom t where num in(1,2,3)連続値の場合、betweenを使用できる場合は、inを使用しないでください:select id from tここで、numは1から3の間です
-
次のクエリでもフルテーブルスキャンが発生します。selectidfromt where name like '%Li%'効率を向上させるために、フルテキスト検索を検討できます。
-
where句のフィールドで式操作を実行しないようにする必要があります。これにより、エンジンはインデックスの使用を中止し、テーブル全体のスキャンを実行します。
-
where句の「=」の左側で関数、算術演算、またはその他の式演算を実行しないでください。
-
インデックスフィールドを条件として使用する場合、インデックスが複合インデックスの場合、システムがインデックスを使用することを保証するために、インデックスの最初のフィールドを条件として使用する必要があります。そうでない場合、インデックスは使用されないため、可能な限り使用する必要があります。フィールドの順序は、インデックスの順序と一致しています。
-
多くの場合、inの代わりにexistsを使用することをお勧めします。selectnumfrom a where num in(select num from b)は
、次のステートメントに置き換えられ
ます。selectnum from a where presents(select 1 from b where num = a.num) -
インデックスはできるだけ多くはありません。インデックスを作成すると、対応する選択の効率が向上しますが、挿入または更新中にインデックスが再構築される可能性があるため、挿入と更新の効率も低下します。そのため、詳細に応じて、インデックスの作成方法を慎重に検討する必要があります。状況によります。テーブルのインデックスの数は6を超えてはなりません。多すぎる場合は、頻繁に使用されない列にインデックスを作成する必要があるかどうかを検討する必要があります。
-
select from tはどこでも使用せず、「」を特定のフィールドリストに置き換え、未使用のフィールドを返さないでください。
-
大規模なトランザクション操作を回避し、システムの同時実行性を向上させるようにしてください。
-
サブデータベース
-
分類テーブルサブデータベース
3.どのタイプのredisサポート
文字列、ハッシュ、リンクリスト、順序付き、順序なしの5つのタイプをサポートします。最新のredis 5.0では、キューを非常に効率的にサポートするためにストリームタイプが新たに追加されました。
4.PHP7とphp5の違い
-
foreachは内部配列ポインタを変更しなくなりました
-
スカラー型宣言。古いバージョンでは、関数のパラメーター宣言は(Array $ arr)、(CLassName $ obj)などのみです。string(string)、integer(int)、floating-point number(float)、Booleanなどの基本型値(bool)などは宣言できません
-
リターンタイプ宣言のサポートが追加されました
declare(strict_types=1);
function add(int $a, int $b){
return $a+$b;
}
echo add(1,2);
echo add(1.5, 2.6);
- ヌル合体演算子
プロジェクトでは、三元式とisset()が同時に使用される場合が多く、ヌル合体演算子(??)の新しい構文シュガーが追加されています。変数が存在し、値がNULLでない場合は、独自の値を返します。それ以外の場合は、2番目のオペランドを返します。
旧版:isset($ _GET ['id'])?$ _GET [id]:エラー;
新しいバージョン:$ _ GET ['id'] ?? 'err';
- define()で定数配列を定義します
在 PHP 5.6 中仅能通过 const 定义常量数组,PHP 7 可以通过 define() 来定义。
<?php
define('ANIMALS',
['dog', 'cat', 'bird']);
echo ANIMALS[1];
// outputs "cat"
const name = ['1','2'];
echo name[1];
-
新しいクラスを介した匿名クラスのインスタンス化をサポートするようになりました。これを使用して、「使用後に焼き付けられる」完全なクラス定義を置き換えることができます。
-
preg_replace_callback_array()
新しい関数preg_replace_callback_array()が追加されました。この関数を使用すると、preg_replace_callback()関数を使用するときにコードがよりエレガントになります。PHP7より前は、コールバック関数はすべての正規式を呼び出し、コールバック関数は一部のブランチで汚染されていました。
5.ポインタの問題
<?php
$array = [1,2,3];
foreach ($array as $k=>&$v){
$v++;
}
var_dump($array);
foreach ($array as $k=>$v){
echo $v;
}
233
6、array_column()
入力配列の単一の列の値を返します。
array_column(array,column_key,index_key);
<?php
// 可能从数据库中返回数组
$a = array(
array(
'id' => 5698,
'first_name' => 'Peter',
'last_name' => 'Griffin',
),
array(
'id' => 4767,
'first_name' => 'Ben',
'last_name' => 'Smith',
),
array(
'id' => 3809,
'first_name' => 'Joe',
'last_name' => 'Doe',
)
);
$last_names = array_column($a, 'last_name', 'id');
print_r($last_names);
?>
結果
Array
(
[5698] => Griffin
[4767] => Smith
[3809] => Doe
)
7.最初の5つの通話記録を取り出します
select name,count(*) as num from order
where date_sub(curdate(), INTERVAL 10 DAY) <= date(`created_at`)
group by name
order by num desc
limit 10;
8.PHP拡張機能のインストール
//下载libevent扩展文件压缩包(在当前系统哪个目录下载随意)
~# wget http://pecl.php.net/get/libevent-0.1.0.tgz
//解压文件
~# tar -zxvf libevent-0.1.0.tgz
//进入源码目录
~# cd libevent-0.1.0/
//运行phpize命令,写全phpize的路径
~# /usr/local/php/bin/phpize
//运行configure命令,配置时 要将php-config的路径附上
~# ./configure --with-php-config=/usr/local/php/bin/php-config
//运行make命令
~# make
//测试编译安装
~# make test
//正式编译安装
~# sudo make install
//修改php.ini,结尾加入:extension=libevent.so
//重启对应的php-fpm
9.セッションとCookieの関係
前提是服务端开启了session
1. 第一次访问页面时, 服务端生成一个不重复的sessionid(当前会话id)以及命名为sess_xxx的session文件
该session文件保存在php.ini文件中指定的目录, xxx是sessionid, sessionid可以通过session_id()函数来获取
2. 服务端向客户端返回响应, 其中有响应头Set-Cookie:PHPSESSID=xxx
3. 客户端收到Set-Cookie响应头, 将sessionid写入cookie, cookie的key为PHPSESSID, value为sessionid
比如PHPSESSID=jlis2mcmv6d5hejkemom77ibm3
4. 当第二次访问页面时, 客户端会把cookie放在请求头(Request Header)中, 服务端识别PHPSESSID这个cookie
然后根据这个cookie获取当前会话ID(sessionid), 从而找到对应的session文件, 再从session文件中读取信息
10.jsonpの原則
11.Ajaxクロスドメイン
12.マスタースレーブレプリケーションの原則
13、オペレーター優先順位の問題
<?php
$tmp = 0 == 'a' ? 1: 2;
echo $tmp;
?>
注意してください、迷子にならないでください
さて、みなさん、上記はこの記事の全内容です。ここで見ることができるのはすべて才能です。さっきも言ったように、PHPには技術的なポイントがたくさんあります。多すぎるので、書くのは本当に不可能で、書いた後はあまり読まないので、必要に応じてここでPDFとドキュメントに整理します。できる
クリックしてシークレットコードを入力してください:PHP +「プラットフォーム」
学習内容の詳細については、[Comparative Standard Factory]の優れたPHPアーキテクトチュートリアルカタログをご覧ください。給与が確実に上がるように読むことができます(継続的な更新)
上記のコンテンツは、すべての人に役立つことを願っています。多くのPHP担当者は、上級者になると常に問題やボトルネックに直面します。ビジネスコードを書きすぎると、方向性がわかりません。どこから改善を始めればよいかわかりません。これに関する情報をまとめました。ただし、これらに限定されません。分散アーキテクチャ、高スケーラビリティ、高パフォーマンス、高同時実行性、サーバーパフォーマンスチューニング、TP6、laravel、YII2、Redis、Swoole、Swoft、Kafka、Mysql最適化、シェルスクリプト、Docker、マイクロサービス、Nginxなど。多くの知識ポイント、高度な高度な乾物は、誰とでも無料で共有でき、必要な人は私のPHPテクノロジー交換グループに参加できます