周记 2019.4.8~4.14
1. 模糊查询:
like : 可以使用前缀索引
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。REGEXP: 正则表达式,可以同时匹配多个
其他:LOCATE('substr',str,pos),POSITION('substr' IN `field`)方法,INSTR(`str`,'substr')方法,FIND_IN_SET(str1,str2):
参见:https://www.cnblogs.com/wangmeijian/p/5392954.html
2. 一般情况下不要在字符串列建立索引,如果非要使用字符串索引,可以采用以下两种方法:
a.只是用字符串的最左边n个字符建立索引,推荐n<=10;比如index left(address,8),但是需要知道前缀索引不能在order by中使用,也不能用在索引覆盖上。
b.对字符串使用hash方法将字符串转化为整数,address_key=hashToInt(address),对address_key建立索引,查询时可以用如下查询where address_key = hashToInt(‘beijing,china’) and address = ‘beijing,china’;
hash 索引无法被用来避免数据的排序操作。
3. mysql出现You can’t specify target table for update in FROM clause 这个错误的意思是不能在同一个sql语句中,先select同一个表的某些值,然后再update这个表。
4. 字符类型和数字类型之间的性能差别,用字符串做索引扫描是否会有性能损耗?
两者的主要差别就在于,字符类型有字符集的概念,每次从存储端到展现端之间都有一个字符集编码的过程。而这一过程主要消耗的就是CPU资源,对于In-memory的操作来说,这是一个不可忽视的消耗。如果要固化到具体测试结果,我们这边的经验数据是20%,具体值还是和环境和数据有关系。此外,latin1 和 UTF8 之间也有10%左右的性能差别。
5. mysql里如果是字符串类型,每当和数字比较,会把字符串转化成int再和数字比较,由于mysql默认最大支持20位int转化。可能会导致数据值不对,一定注意!!!!!!!!!!
6. 字符串索引,不能进行范围查询。只能等值查询的时候才能使用字符串索引,并且 避免隐式转换
