Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySql选择索引的好处_Php_Mysql_Select - Fatal编程技术网

Php MySql选择索引的好处

Php MySql选择索引的好处,php,mysql,select,Php,Mysql,Select,这两种SQL select之间是否有显著的优势 SELECT * FROM table USE INDEX (cod_clie) WHERE cod_clie = "example" AND pwd_clie = "example" LIMIT 1; SELECT * FROM table WHERE cod_clie = "example" AND pwd_clie = "example" LIMIT 1; 当然,cod_clie是一个索引字段 通常不会,因为mysql应该使用索引。要10

这两种SQL select之间是否有显著的优势

SELECT * FROM table USE INDEX (cod_clie) WHERE cod_clie = "example" AND pwd_clie = "example" LIMIT 1;

SELECT * FROM table WHERE cod_clie = "example" AND pwd_clie = "example" LIMIT 1;

当然,cod_clie是一个索引字段

通常不会,因为mysql应该使用索引。要100%确定,只需将explain附加到查询中并比较输出

EXPLAIN SELECT * FROM table USE INDEX (cod_clie) WHERE cod_clie = 'example' AND pwd_clie = 'example' LIMIT 1;
EXPLAIN SELECT * FROM table WHERE cod_clie = 'example' AND pwd_clie = 'example' LIMIT 1;

这里的索引用于加速SQL搜索。

如果没有任何索引,那么在查找特定值时,SQL将遍历整个表(其中cod_clie=“example”)


如果您有包含大量数据的大型数据库,您将意识到性能时间上的巨大差异

SQL索引通过按特定排序顺序排列索引字段的值来提高SQL select查询的性能,从而最大限度地减少表中要扫描的行数,直到找到包含该列中的筛选值的匹配行


通常索引应用于SQL select查询中用作筛选器的字段。

默认情况下,查询分析器会查找最佳索引以提高查询性能。但是由于许多手动索引或大量修改的表(例如INSERT或DELETE),随着时间的推移,键分布(基数)会偏离真实状态

如果优化器选择了错误的计划,可能会导致严重的性能问题。这意味着您的服务器可能在最意想不到的时候出现性能问题


幸运的是,我们可以使用“使用索引”提示强制优化器选择特定的计划(索引)。

为查询编制索引确实可以提高性能,但识别希望显示的列也有帮助。所以尽可能避免使用“*”。如上所述,不是真的。没有命令的限制是毫无意义的。”“选择*”是邪恶的。一般来说,最好让MySQL知道使用哪些索引。可能是@草莓的副本,谢谢你的回复。如果我已经弄清楚了我的例子中最好的查询是:从表使用索引(cod_clie)中选择field1、field2,其中cod_clie=“example”和pwd_clie=“example”根据索引存在的id限制1个顺序,否则使用它的查询根本不会运行。因此,你的答案似乎只是重复了课堂上的一节课,并没有以任何方式真正回答实际问题。这个问题与索引的好处无关,所以像引用这样的教科书似乎没有什么用处。你可以通过确保回答实际问题来改进你的答案。应该指出的是,也许乐观主义者有很好的理由选择你认为效率低下的计划。如果您未能正确理解特定计划的性能影响,并强制执行错误的索引,实际上您可能会使性能更差。