美文网首页
PHP面试题3--索引,JS处理字符串的方法

PHP面试题3--索引,JS处理字符串的方法

作者: Amy1234567 | 来源:发表于2021-05-18 17:28 被阅读0次

    索引的作用及优缺点

    创建索引能大大提高系统性能

    优点:

    1. 通过创建唯一性索引,可以保证数据库表中的每一行数据的唯一性。

    2. 加快数据检索的速度,这也是创建索引的最主要原因。

    3. 加快表与表之间的连接,在实现表的参考完整性方面特别有意义。

    4. 在使用分组和排序子句进行检索时,可以减少分组和排序的时间。

    5. 通过使用索引,可以再查询的过程中,使用优化隐藏器,提高系统的性能。

    缺点:

    1. 创建索引和维护索引需要时间,这种时间随着数据量的增加而增加。

    2. 索引需要占物理空间,除了数据表占数据空间之外,每个索引还要占物理空间,如果要建立聚簇索引,需要的空间更大。

    3. 当对表中的数据进行增加,删除和修改的时候,索引也要动态的维护,这就降低了数据的维护速度。

    哪些列应该创建索引?

    1. 在经常要搜索的列上,可以加快搜索的速度。

    2. 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构。

    3. 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度。

    4. 在经常需要根据范围进行搜索的列上,因为索引已经排序,其指定的范围是连续的。

    5. 在经常需要进行排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间。

    6. 在经常使用在where子句中的列上创建索引,加快条件的判断速度。

    哪些列不应该创建索引?

    1. 对于那些在查询中很少使用或者参考的列,不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提到查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。

    2. 对于那些很少数据值的列,也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。

    3. 对应那些定义为text, image和bit数据类型的类不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。

    4. 当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引。

    索引的类型

    Mysql常用的索引有:主键索引,唯一索引,普通索引,组合索引,全文索引

    各个索引的创建方式

    Primary Key(主键索引):alter table table_name add primary key ('column')

    Unique(唯一索引):alter table table_name add unique ('column')

    Index(普通索引):alter table table_name add index  index_name ('column')

    FullText(全文索引):alter table table_name add fulltext ('column')

    组合索引:alter table table_name add index index_name ('column1', 'column2','column3')

    Mysql各种索引的区别

    1. 普通索引(index):最基本的索引,没有任何限制

    2. 唯一索引(Unique):与“普通索引”类似,不同的是:索引列的值必须是唯一的,可以为空

    3. 主键索引(Primary):特殊的唯一索引,不允许有空值

    4. 全文索引(FullText):MySql 5.6 以后,既可以用于MyISAM,InnoDB存储引擎都可以。用于搜索很长一篇文章的时候,效果最好

    5. 组合索引:为了更多的提高MySql效率可建立组合索引,遵循“最左前缀”原则

    索引失效的几种情况

    1. 前导模糊查询不能利用索引(like '%XXX'或者like '%XXX%')(在后面不会)

    2. 如果是组合索引的话,如果不按照索引的顺序进行查找,则会进行全表查询

    3. 条件中有or (如果sql中有or可以换成union)

    4. where判断条件有is null或者is not null (可以给字段设置默认值,确保不会有null存进去)

    5. in和not in要慎用,对于连续的数值,能用between and就不用in

    6.  应尽量避免在where子句中使用!=或<>

    7. 应尽量避免在索引列上做任何操作,如函数,计算,类型转换等。如trim(),substring(),num = 100*2

    js常用字符串处理方法

    JS自带函数

    1. string.concat(string1string2, ..., stringX);    将两个或多个字符的文本组合起来,返回一个新的字符串。

    2. string.charAt(index);    方法可返回指定位置的字符。第一个字符位置为 0, 第二个字符位置为 1,以此类推。

    3. string.indexOf(searchvalue,start);    方法返回某个指定的字符串值在字符串中首次出现的位置。如果没有找到匹配的字符串则返回-1。indexOf()方法区分大小写。

    4. string.match(regexp);    方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。比如:var n=str.match(/ain/gi); 返回值为:存放匹配结果的数组。如果没有找到匹配结果返回null.

    5. string.substring(from, to);    方法用于提取字符串中介于两个指定下标之间的字符。返回的子串包括开始处的字符,不包括结束处的字符。

    6. string.substr(start,length);    方法可在字符串中抽取从start下标开始的指定数目的字符。 substr() 方法不会改变源字符串。

    7. string.replace(searchvalue,newvalue);    方法用于在字符串中用一些字符替换了另一些字符,或替换一个与正则表达式匹配的字符串。比如:var n=str.replace(/blue/g,"red");

    8. string.search(searchvalue);    方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。如果没有找到任何匹配的子串,则返回-1。比如:str.search(/blue/i)。

    9. string.slice(start,end);    方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。使用start(包含)和end(不包含)参数来指定字符串提取的部分。start 参数字符串中第一个字符位置为 0, 第二个字符位置为 1, 以此类推,如果是负数表示从尾部截取多少个字符串,slice(-2) 表示提取原数组中的倒数第二个元素到最后一个元素(包含最后一个元素)。end 参数如果为负数,-1 指字符串的最后一个字符的位置,-2 指倒数第二个字符,以此类推。

    10. string.split(separator,limit);    方法用于把一个字符串分割成字符串数组。方法不改变原始字符串。

    11. string.length;    length 属性返回字符串的长度(字符数)。

    12. string.toLowerCase();    方法用于把字符串转换为小写。

    13. string.toUpperCase();    方法用于把字符串转换为大写。

    14. string.trim();    方法用于删除字符串的头尾空白符,空白符包括:空格、制表符 tab、换行符等其他空白符等。不会改变原始字符串。不适用于 null, undefined, Number 类型。

    15. string.includes(searchvalue, start);    方法用于判断字符串是否包含指定的子字符串。如果找到匹配的字符串则返回 true,否则返回 false。区分大小写。

    相关文章

      网友评论

          本文标题:PHP面试题3--索引,JS处理字符串的方法

          本文链接:https://www.haomeiwen.com/subject/vleejltx.html